Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.05.2013, 09:19   #11
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
А на будущее, как удалять дубликаты из массива?
полностью согласен с советом Stilet
попытаюсь пояснить, почему.

на самом деле, можно (и несложно) удалять элементы и из динамического массива.
Но, давайте разберём, как будет происходить удаление.
Допустим есть массив A из N элементов. Пусть N равен 5:
A[0] = 11
A[1] = 77
A[2] = 35
A[3] = 44
A[4] = 88

допустим, Вы ходите удалить i-й элемент массива ( пусть i=2, удаляем A[2] ).
тогда Вам нужно в цикле от i и до конца списка (N-1) переписать на место элемента следующий за ним элемент.
т.е. на место A[2] переписать A[3], на место A[3] переписать A[4]
после чего уменьшить N на единицу (обрезать массив по длине на 1 элемент)

а теперь представьте, если у Вас N равна сотням тысяч и Вам нужно удалить несколько десятков элементов вначале, то сколько раз и сколько элементов при этом нужно переписать?!

Кстати, если специфика вашей задачи всё позволит Вам подобные излишества (если количество элементов в массиве измеряется десятками или сотнями), тогда, в любом случае, изменение длины массива (SetLength) всё равно желательно выполнять ОДИН раз, после завершения ВСЕХ циклов удалений/копирований, ибо операция SetLength чрезвычайно ресурсозатратная операция...



p.s. крик души. впрочем, все доводы про не эффективность алгоритмов и малоэффективные методы (вроде описанного выше удаления из массива) разбиваются о современные процессоры, с их сумасшедшими частотами, ядрами, конвеерами и т.д. и т.п. Уверен, что на современной процессоре даже крайне неэффективные методы (допустим удаление сотни первых записей из массива на 100000 элементов и изменением длины массива в цикле) будут работать так, что пользователь это не заметит (в данном случае - доли секунды)!
Но это не означает, что нужно писать плохо и неэффективно!!

Последний раз редактировалось Serge_Bliznykov; 14.05.2013 в 09:22.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление одинаковых строк на листе Excel 2003 vfv Microsoft Office Excel 26 21.11.2014 12:58
удаление строк массива XaHTeP Паскаль, Turbo Pascal, PascalABC.NET 8 12.01.2013 20:23
Поиск одинаковых строк и изменения и удаление NightDevil Microsoft Office Excel 8 14.04.2012 01:45
Удаление одинаковых символов из массива maxflint Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 09.05.2010 13:18
удаление одинаковых элементов из массива sauron99 Общие вопросы Delphi 6 15.04.2009 21:27