Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.036 c
14-1122835504
Гаврила
2005-07-31 22:45
2005.08.28
Во Вторую Мировую Войну СССР вступил на стороне


1-1123423392
Андрей Молчанов
2005-08-07 18:03
2005.08.28
DisposePIDL и окно отладчика


3-1121325854
Juice
2005-07-14 11:24
2005.08.28
Программа для визуальной проэктировки баз данных ?


1-1123428673
Eraser
2005-08-07 19:31
2005.08.28
Ошибка в коде. Порча данных


9-1115234771
Qwertyk
2005-05-04 23:26
2005.08.28
3D Модель танка (любого)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский