|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
01.10.2015, 10:12 | #1 |
Пользователь
Регистрация: 05.09.2015
Сообщений: 28
|
Удаление дубликатов из массива
Пока опробовал только 2 способа:
1) Функция. Создаётся массив такого-же размера, как исходный, типа boolean. Исходный массив пробегается от начала к концу. Внутренний цикл от (начала+1) к концу. Если повтор, то в boolean-массиве ставится отметка об удалении элемента по индексу внешнего цикла, а внутренний цикл прерывается (break). В конце элементы из исходного массива переносятся в Result, учитывая отметки в boolean-массиве. 2) Процедура, принимающая указатель на исходный массив. Исходный массив пробегается от начала к концу. Внутренний цикл от (начала+1) к концу. Если встретился повтор, то самый последний элемент массива перемещается на место повторяющегося, а размер самого массива уменьшается. После переноса внутренний цикл продолжается с того же самого места, где встретился повтор, ведь перенесённый с конца элемент тоже может оказаться дубликатом. По моим тестам второй способ раза в 2-3 быстрее. При этом, у меня данные для просеивания такие, что шанс найти дубликаты у рядом расположенных элементов выше. Поделитесь опытом, может есть способы быстрее. Читал, что из отсортированного массива легче удалять дубли, но не проверял на скорость. Не окажется ли, что сортировка займёт слишком много времени? |
01.10.2015, 10:26 | #2 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
А сравнить? Да и сортировки разные бывают, значит проверить несколько вариантов сортировки. А так просто наобум ни кто не скажет
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
01.10.2015, 10:37 | #3 |
Пользователь
Регистрация: 05.09.2015
Сообщений: 28
|
Задача не редкая. Должны же найтись люди, которые уже сравнили.
|
01.10.2015, 14:08 | #5 |
фонатик DELPHI
Форумчанин
Регистрация: 14.01.2008
Сообщений: 714
|
Код:
95% сбоев и ошибок приложений, находится в полу метрах от монитора
|
01.10.2015, 15:16 | #6 |
Пользователь
Регистрация: 05.09.2015
Сообщений: 28
|
JUDAS, так это тоже, что у меня второй вариант.
|
01.10.2015, 15:41 | #7 | |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Цитата:
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
|
01.10.2015, 17:27 | #8 | |
фонатик DELPHI
Форумчанин
Регистрация: 14.01.2008
Сообщений: 714
|
Цитата:
Автор, я думал что нужна реализация, а не варианты 3. Перенос уникальный объектов в другой массив. Входная длина запоминается в переменную. Проходя по исходному массиву, ищем уникальные значения во втором массиве. Если таковых нет, в конец результирующего массива добавляем текущий элемент.
95% сбоев и ошибок приложений, находится в полу метрах от монитора
|
|
02.10.2015, 11:56 | #9 |
Форумчанин
Регистрация: 19.01.2015
Сообщений: 158
|
Когда-то находил https://rsdn.ru/forum/delphi/3437315
|
12.10.2015, 14:25 | #10 |
Пользователь
Регистрация: 05.09.2015
Сообщений: 28
|
Думаю, можно в этой же теме написать.
Вот есть процедура: Код:
Код:
Последний раз редактировалось alcaedo; 12.10.2015 в 16:44. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Удаление дубликатов с ListBox | celovec | Общие вопросы Delphi | 7 | 13.09.2016 09:07 |
Удаление дубликатов | SolovejK | Общие вопросы Delphi | 7 | 13.03.2015 23:31 |
Удаление дубликатов | Wind-up Bird | Microsoft Office Excel | 9 | 02.02.2012 12:49 |
Удаление дубликатов строк | hon | Паскаль, Turbo Pascal, PascalABC.NET | 10 | 02.08.2011 05:29 |
Удаление дубликатов | Deltist | Microsoft Office Excel | 11 | 14.01.2011 16:01 |