![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Быстрый алгоритм удаления одинаковыз записей
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.
Может быть, лучше не удалять их оттуда, а просто НЕ ДОБАВЛЯТЬ?