Главная страница
    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.47 MB
Время: 0.05 c
1-1123219072
root
2005-08-05 09:17
2005.08.28
Манифест XP


3-1121767950
Magic
2005-07-19 14:12
2005.08.28
ADO+LIKE (не работает)


14-1123143302
kblc
2005-08-04 12:15
2005.08.28
Debug


1-1123106623
pOLyMOrpH
2005-08-04 02:03
2005.08.28
Компоненты в run-time


9-1114860422
MrAngel
2005-04-30 15:27
2005.08.28
Две машины - одна видуха - разные результаты





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