Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];

Вниз

Двумерный массив   Найти похожие ветки 

 
Separator ©   (2005-11-24 10:27) [0]

Как проще всего сделать двумерный массив, чтобы потом легко изменять его размеры, удалять и вставлять строки, и столбцы?


 
tesseract ©   (2005-11-24 10:34) [1]

Может дерево с двумя ветками?


 
Separator ©   (2005-11-24 10:43) [2]

не пойдет, дерево с двумя ветками, это n*2 значений
а мне надо n*m значений


 
umbra ©   (2005-11-24 10:47) [3]

одномерный массив nxm элементов. индексы известны, удалять легко


 
Sandman29 ©   (2005-11-24 10:47) [4]

Список списков.


 
Separator ©   (2005-11-24 10:51) [5]


> umbra ©   (24.11.05 10:47) [3]

А при изменении размера?


 
Separator ©   (2005-11-24 10:51) [6]


> umbra ©   (24.11.05 10:47) [3]

А при изменении размера?


 
Separator ©   (2005-11-24 11:03) [7]

Допустим первоначально не известно максимальное количество элементов в строке или в столбце.
Например, я считываю файл с данными и мне нужно паралельно их анализировать и заполнять массив, количество элементов в строке не известно и может быть разным по отношению к разным строкам, но в результате мне нужно получить двумерный массив, а недостающие элементы просто заполнить нулями.
В данном случае одномерный массив не подойдет, просто не удобно будет расширять его.


 
umbra ©   (2005-11-24 11:13) [8]

можно сделать массив ссылок на одномерные массивы (строки), они могут быть произвольной длины.


 
begin...end ©   (2005-11-24 11:15) [9]

> Separator ©   (24.11.05 10:27)

> легко изменять его размеры, удалять и вставлять строки,
> и столбцы?

Типичные требования, которым удовлетворяет связанный список. В смысле, [4].

> umbra ©   (24.11.05 11:13) [8]

Двумерный динамический массив.


 
umbra ©   (2005-11-24 11:22) [10]

2 begin...end ©   (24.11.05 11:15) [9]

кто бы сомневался, я не буду :)
просто, как я понял, автор хочет легко удалять и строки, и столбцы, что совсем уж легко не получится никак


 
Separator ©   (2005-11-24 11:29) [11]

про удаление знаю что сложно, пока нужно только произвольное наращивание


 
begin...end ©   (2005-11-24 11:34) [12]

> Separator ©   (24.11.05 11:29) [11]

Добавление элементов в концы строк (столбцов)? Тогда [8].


 
Separator ©   (2005-11-24 11:51) [13]

В общем так:


var
    M: array of array of Integer;
begin
    SetLength(M, 3, 4);
    //заполняем, потом хочу увеличить так
    SetLength(M, 5, 4);
    // Данные сохранятся? А если так?
    SetLength(M, 6, 5);
    //Массив просто разрастется?
end;


 
begin...end ©   (2005-11-24 11:52) [14]

> Separator ©   (24.11.05 11:51) [13]

Да, в обоих приведённых случаях данные сохранятся.


 
Separator ©   (2005-11-24 11:59) [15]

как такой массив расположен в памяти?
допустим в одномерных массивах при удалении элемента в середине просто с помощью move сдвигал данные "на лево" и конец отсекал SetLength
А тут так можно сделать?


 
begin...end ©   (2005-11-24 12:17) [16]

> Separator ©   (24.11.05 11:59) [15]

Ну, что такое одномерный динамический массив, думаю, понятно. Это указатель на память, в котором последовательно расположены элементы массива. Двумерный динамический массив можно рассматривать как динамический массив, элементами которого являются динамические массивы.

Пример:

var
 A: array of array of Integer;
begin
 SetLength(A, 2, 5);
end.

Здесь переменная A -- это указатель на память, в которой последовательно расположены две ссылки (указателя) на "внутренние" массивы. В свою очередь, эти ссылки указывают на области памяти, в каждой из которых размещено (непрерывно) по 5 элементов типа Integer. Поэтому, если речь идёт про удаление элемента в пределах одного самого внутреннего массива (например, A[1][2]), то это можно сделать сдвигом:

Move(A[1, 3], A[1, 2], 2 * sizeof(Integer));
SetLength(A[1], Pred(Length(A[1])));

но при этом нет никаких оснований утверждать, что первые 5 Integer-элементов (т.е. тело массива A[0]) находятся по соседству с другими 5 элементами (телом массива A[1]).


 
Separator ©   (2005-11-24 12:20) [17]

ясно, спасибо


 
Separator ©   (2005-11-24 12:23) [18]

В общем, сдвигаю move во всех ветках и потом общим SetLength уменьшаю, также при удалении в корне



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.021 c
1-1132569064
DN
2005-11-21 13:31
2005.12.18
В TWebBrowser загружаю страницу, как после окончания загрузки зап


9-1122150518
Иггорь
2005-07-24 00:28
2005.12.18
Как сделать точный таймер?


1-1132732615
Ega23
2005-11-23 10:56
2005.12.18
override-функция, она уже virual?


2-1133789599
veres
2005-12-05 16:33
2005.12.18
Упаковка dbf


8-1114806809
Profi
2005-04-30 00:33
2005.12.18
Изменение размера TImage





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский