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

Вниз

Массивы   Найти похожие ветки 

 
nimble   (2002-03-20 08:06) [0]

Вопрос такого плана, допустм есть массив из 50 элементов. Я пробегаю по нему, ищя нужный элемент, если есть то удаляю, нет - начинеам с начала искать другой элемент. Вопрос как сделать так тобы размер массива уменьшался? Удалил элемент массив с 50->49, чтобы по сто раз не бегать от 0 до 50.


 
MBo   (2002-03-20 08:12) [1]

используй списки (TList) или динамические массивы


 
Song   (2002-03-20 08:23) [2]

удаляй и сдвигай


 
nimble   (2002-03-20 09:12) [3]

->Song
Удалять и сдвигать требует времени :(

->Song
Я и так использую динамические, а как это осуществить, можно по подробнее!


 
Андрей Сенченко   (2002-03-20 09:18) [4]

>> nimble © (20.03.02 09:12)
>> Удалять и сдвигать требует времени :(


Не так уж и много, как может показаться. По крайней мере при объявленных Тобой 50-ти элементах.


 
Андрей Сенченко   (2002-03-20 09:22) [5]

Если порядок следования элементов массива Тебя не волнует - просто заменяй. Для динамического массива это будет выглядеть примерно так:
1. Удалить i-ый элемент
2. Взять верхнюю границу массива
3. Приравнять i-ый элемент последнему.
4. Удалить последний и уменьшить верхнюю границу на 1

По-моему так


 
MBo   (2002-03-20 09:22) [6]

Move(a[N+1],a[N],(length(a)-n)*SizeOf(AElement));
setlength(a,length(a)-1);


 
Doom   (2002-03-20 09:25) [7]


> nimble
> Я и так использую динамические, а как это осуществить, можно
> по подробнее!


Если будешь использовать динамические то самому придется с памятью возиться. Так что лучше TList. А есть также хорошее решение: использовать TStrings. Поиск будет идти несколько медденне но зато красиво получится (Опять же - таки смотря для чего это нужно)


 
Vogul   (2002-03-20 09:36) [8]

Связанные списки - гибко и красиво.


 
nimble   (2002-03-20 10:18) [9]

Ну по поводу 50 элементов это пример, а на самом деле их около 5 тыс.
А как насчет указателей, идей ни у кого нет?


 
Андрей Сенченко   (2002-03-20 10:22) [10]

nimble © (20.03.02 10:18)

Что - указатель на каждый из "около 5 тыс" элементов ?
Может при таких объемах действительно положиться на TList или TStrigs ?


 
nimble   (2002-03-20 10:24) [11]

Массив представляет собой структуру, там всего по немногу и числа, и строки и boolean. То для выборки конкретного поля потребуется не меньше мук!


 
MBo   (2002-03-20 13:12) [12]

IMHO, общие принципы:
1) маленькие элементы - динамический массив
2) большие элементы, нечастое удаление - TList и т.п.
3) много больших элементов, частое удаление - можно подумать о связанном списке
С TList в первую очередь надо проверить - если скорость устроит (при удалении), то это самое удобное


 
AFROLOV   (2002-03-20 13:43) [13]

1. Может есть смысл элементы не удалять(достаточно долгая операция) а выставлять ему флаг удаленный? Для сложных элементов (структуры, объекты) и сложных критериев сравнения это может быть оправданно.
2. Для увеличения скорости работы может их полезно отсортировать?
Поиск по отсортированному списку может быть организован очень быстро (например методом дихотамии).
3. Построить над ними индекс как в БД.(это уже совсем извратно)


 
MBo   (2002-03-20 13:46) [14]

кстати, уже спрашивали, важен ли порядок следования - так как?



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

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

Наверх




Память: 0.47 MB
Время: 0.005 c
4-342
kiber
2002-01-31 01:17
2002.04.01
win api


1-210
AlexMey
2002-03-20 12:40
2002.04.01
Как определить координаты курсора?


14-299
Igor E. Timofeev
2002-02-19 03:24
2002.04.01
Время жизни программы.


1-137
Transaero
2002-03-19 12:04
2002.04.01
Как возвести в степень отрицательное число?


3-27
staratel
2002-03-05 08:52
2002.04.01
базы данных (DBGrid)





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