Главная страница
    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.014 c
14-1133179570
Fl@sh
2005-11-28 15:06
2005.12.18
Выбор джойстика


14-1133105555
DeMoN[777]
2005-11-27 18:32
2005.12.18
Помогите с выбором КПК


2-1133441955
worldmen
2005-12-01 15:59
2005.12.18
Передача данных из дочерн. формы в родит. форму


1-1132217128
Ярослав
2005-11-17 11:45
2005.12.18
Путь до файлу службы


2-1133137721
Дева
2005-11-28 03:28
2005.12.18
Экспорт данныч из Excel`я





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский