Главная страница
    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.038 c
14-1123151892
Andy BitOff
2005-08-04 14:38
2005.08.28
Погордимся за наших.


14-1122027658
Piter
2005-07-22 14:20
2005.08.28
Чарльз Петцольд "Программирование для MS Windows на С#"


14-1123161652
oldman
2005-08-04 17:20
2005.08.28
Улыбайтесь, господа...


1-1123398969
msguns
2005-08-07 11:16
2005.08.28
Динамическое создание контейнерных объектов.


1-1123521771
Андрей Молчанов
2005-08-08 21:22
2005.08.28
TStringList.AddObject





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский