Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.18;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.025 c
8-1112926472
Deedlit
2005-04-08 06:14
2005.12.18
ImageList => SpeedButton


2-1133181678
Tihonya
2005-11-28 15:41
2005.12.18
Какую версию транслятора выбрать?


4-1129555422
kolos_rus
2005-10-17 17:23
2005.12.18
Как создать панель на рабочем столе, чтобы она не пере


3-1130736135
chsv
2005-10-31 08:22
2005.12.18
Не выполняется удаление из Access через ADO


2-1133521081
Suriken
2005-12-02 13:58
2005.12.18
гиперссылка