Форум: "Основная";
Текущий архив: 2005.08.28;
Скачать: [xml.tar.bz2];
ВнизБыстрый алгоритм удаления одинаковыз записей Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.037 c