Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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


leonidus ©   (2005-08-08 10:22:00) 

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


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

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

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

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


Rouse_   (2005-08-09 10:08:00) [2]

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


leonidus   (2005-08-09 09:36:00) [3]

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


Slym   (2005-08-08 16:29:00) [4]

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


Leonid Troyanovsky   (2005-08-08 16:15:00) [5]


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


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

--
Regards, LVT.


Slym   (2005-08-08 13:49:00) [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;


Chaser   (2005-08-08 13:09:00) [7]

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

// 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;


leonidus   (2005-08-08 11:02:00) [8]

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


Lamer@fools.ua   (2005-08-08 10:55:00) [9]

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

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


leonidus   (2005-08-08 10:47:00) [10]

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


begin...end   (2005-08-08 10:31:00) [11]

> leonidus ©   (08.08.05 10:22)

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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо