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

Вниз

Быстрый алгоритм удаления одинаковыз записей   Найти похожие ветки 

 
leonidus ©   (2005-08-08 10:22) [0]

Мастера подскажите пожалуйста какой нибудь быстрый и желательно простой алгоритм удаления из stringlist`а одинаковых строчек. У меня размер stringlist`а 84.000 элемента и делать два вложеннвх цикла для пребора очень не хочется.


 
begin...end ©   (2005-08-08 10:31) [1]

> leonidus ©   (08.08.05 10:22)

См. в справке описание свойств TStringList.Duplicates и TStringList.Sorted.

Может быть, лучше не удалять их оттуда, а просто НЕ ДОБАВЛЯТЬ?


 
leonidus ©   (2005-08-08 10:47) [2]

Я не совсем точно выразился, строки имеют примерно такой вид:
a=1
b=2
c=3
a=1
d=4
поэтому вероятно полного дублирования не будет, т.е. нужно проверять на дубляж то что правее знака =.


 
Lamer@fools.ua ©   (2005-08-08 10:55) [3]

>>leonidus ©   (08.08.05 10:47) [2]

В таком случае лучше воспользоваться хэш-таблицей, IMHO.


 
leonidus ©   (2005-08-08 11:02) [4]

А что это за хеш-таблица? можно пример кода для приведенного выше массива?


 
Chaser ©   (2005-08-08 13:09) [5]

Попробуй так:

// DistinctList
procedure DistinctList(AllList: TStrings);
var
Filtered: TStringList;
begin
Filtered:=TStringList.Create;
Filtered.Duplicates:=dupIgnore;
Filtered.BeginUpdate;
Filtered.Sorted:=true;
Filtered.AddStrings(AllList);
AllList.Clear;
AllList.Assign(Filtered);
Filtered.EndUpdate;
Filtered.Free;
end;

Вызов функции:
DistinctList(Str); // Str - TStringList;


 
Slym ©   (2005-08-08 13:49) [6]

1. Отсотрировать по значению после = (CustomSort)
2. в 1 Цикле
var Curent,s:string;
begin
 if List.Count=0 then Exit;
 Curent:=List.ValueFromIndex(0);
 i:=1;
 while i<List.Count do
begin
 s:=List.ValueFromIndex(i)
 if s<>Curent then
 begin
   Curent:=s;
   Inc(i);
 end else
   List.Delete(i);
end;


 
Leonid Troyanovsky ©   (2005-08-08 16:15) [7]


> leonidus ©   (08.08.05 11:02) [4]
> А что это за хеш-таблица? можно пример кода для приведенного
> выше массива?


http://groups.google.com/group/fido7.ru.delphi/msg/389223945c04aeb2

--
Regards, LVT.


 
Slym ©   (2005-08-08 16:29) [8]

Leonid Troyanovsky ©   (08.08.05 16:15) [7]
Если на то пошло - THashedStringList из inifiles


 
leonidus ©   (2005-08-09 09:36) [9]

Ок, всем спасибо.


 
Rouse_ ©   (2005-08-09 10:08) [10]

Попробуй вот это: http://rouse.front.ru/dict.zip
Делает словарь уникальных слов. 3 меговый файл обрабатывает за 0.07 сотых секунды. Спокойно можно переделать под взятие данных из стринглиста...


 
Lamer@fools.ua ©   (2005-08-09 11:19) [11]

>>Rouse_ ©   (09.08.05 10:08) [10]

>3 меговый файл обрабатывает за 0.07 сотых секунды.

То есть за 0.0007 с? :o)



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

Текущий архив: 2005.08.28;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.075 c
3-1121353211
Juice
2005-07-14 19:00
2005.08.28
События Interbase


14-1123051609
syte_ser78
2005-08-03 10:46
2005.08.28
Глюк при запуске от имени


14-1122917306
Starcom
2005-08-01 21:28
2005.08.28
Своя прога для обновления прошивки CD/DVD-R/RW?


1-1123656701
Juice
2005-08-10 10:51
2005.08.28
TValueListEditor с жестким выпадающий список


1-1123491917
Alx2
2005-08-08 13:05
2005.08.28
D6 не хочет компилировать следущий код: