Главная страница
    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.044 c
8-1113586489
Bocman
2005-04-15 21:34
2005.08.28
Обработка массива трехмерных координат


1-1123432071
rolex
2005-08-07 20:27
2005.08.28
Как сохранить сидержимое и структуру TreeView в файл?


3-1121360879
Sam Stone
2005-07-14 21:07
2005.08.28
Формат даты


3-1121249815
Stanislav
2005-07-13 14:16
2005.08.28
ADOCommand Асинхронное выполнение


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