Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.10.17;
Скачать: [xml.tar.bz2];

Вниз

Удаление повторений в TStringlist   Найти похожие ветки 

 
gid ©   (2004-10-01 14:37) [0]

В TStringList имеется множество повторяющихся строк, как их удалить как можно быстрее (строк около 200 000).


 
begin...end ©   (2004-10-01 14:38) [1]

Может быть, проще не заносить их туда (см. свойство Duplicates)?


 
gid ©   (2004-10-01 14:44) [2]

>>>>begin...end
Имееш ввиду перед заполнением  TStringlist установить параметр Duplicates, но в какое состояние, их ведь четыре.


 
default ©   (2004-10-01 14:48) [3]

gid ©   (01.10.04 14:44) [2]
хелп на что?


 
begin...end ©   (2004-10-01 14:51) [4]


> [2] gid ©   (01.10.04 14:44)

List.Sorted := True;
List.Duplicates := dupAccept;


> их ведь четыре

Не угадал.


 
gid ©   (2004-10-01 14:51) [5]

>>>default ©   (01.10.04 14:48) [3]
А тебе,че, трудно подсказать.

------------------------------

А вообще нужно именно удаление из TStringlist.


 
gid ©   (2004-10-01 14:53) [6]

>>begin...end ©   (01.10.04 14:51) [4]
спасибо, ща буду пробовать.


 
default ©   (2004-10-01 14:56) [7]

[2]
точного названия не монил помнил что что-о вроде DupIgnore
проблема не то что мне в лом, проблема глуюже
когда на такие вопросы отвечают, авторы сообр-ют опы да чё я там буду хелп рыть спрошу на форуме отсюда процент вопросов "хелповских" растёт уровень форума падает


 
begin...end ©   (2004-10-01 14:59) [8]


> [7] default ©   (01.10.04 14:56)


> когда на такие вопросы отвечают, авторы сообр-ют опы да
> чё я там буду хелп рыть спрошу на форуме

В мой огород, надо понимать?


 
gid ©   (2004-10-01 15:00) [9]

>>>default ©   (01.10.04 14:56) [7]

смотри gid ©   (01.10.04 14:51) [5]  строка 5 "А вообще нужно именно удаление из TStringlist."


 
default ©   (2004-10-01 15:04) [10]

begin...end ©   (01.10.04 14:59) [8]
нет, в огород таких вопросов
правда вопрос изменился как вижу
gid ©   (01.10.04 15:00) [9]
если список не отсортирован то наверно лучше осортировать перед такой операцией


 
gid ©   (2004-10-01 15:07) [11]

>>>default ©   (01.10.04 15:04) [10]
Сортировка само сабой я думаю мож сам поиск и удаление в цикл загнать.


 
begin...end ©   (2004-10-01 15:09) [12]


> [11] gid ©   (01.10.04 15:07)

Ну если ты ручками удалять будешь, на фига тогда сортировка?


> я думаю мож сам поиск и удаление в цикл загнать

И в чём проблема?


 
default ©   (2004-10-01 15:17) [13]

gid ©   (01.10.04 15:07) [11]
может что-то вроде?
i := 1;
repeat
 S := SList[i];
 while (i < Length(SList)) and (SList[i+1] = S)
 then SList.Delete(i+1);
 Inc(i);
until i < Length(SList);


 
default ©   (2004-10-01 15:20) [14]

for i := 1 to Length(SList)-1 do
while (i+1 <= Length(SList) and (SList[i+1] = SList[i])
then Delete(i+1)
лучше так чем было


 
begin...end ©   (2004-10-01 15:21) [15]


> [4] begin...end ©   (01.10.04 14:51)

Ошибся, блин...

> List.Duplicates := dupAccept;

List.Duplicates := dupIgnore;


 
default ©   (2004-10-01 15:43) [16]

сори, поторопился я здорово
вот такой код будет работать

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Cardinal;
begin
  i := 0;
  repeat
   while (i < Memo1.Lines.Count-1) and
     (Memo1.Lines[i] = Memo1.Lines[i+1]) do Memo1.Lines.Delete (i+1);
   Inc(i);
  until i > Memo1.Lines.Count-1;
end;


 
begin...end ©   (2004-10-01 16:08) [17]


> [16] default ©   (01.10.04 15:43)


> until i > Memo1.Lines.Count-1;

until i = Memo1.Lines.Count-1;
:-)


 
Sandman25 ©   (2004-10-01 16:19) [18]

MemoLines := Memo.Lines;
for I := MemoLines.Count-2 downto 0 do
 if MemoLines[I] = MemoLines[I + 1] then
   MemoLines.Delete(I);


 
TUser ©   (2004-10-01 16:27) [19]


> А вообще нужно именно удаление из TStringlist.

1. Копировать в какую-нибудь новую структуру данных. При копировании каждой новой строки - проверять, есть ли она уже там. Т.о. требует уметь быстро вставлять и находить - см. такие структуры, как например хеш-таблицы, нагруженные деревья, и пр. и пр.
2. Отсортировать (квиком) список, затем пройтись по нему и проверять на равенство с предыдущей строкой. Если строка новая - кописровать ее в новую структуру.


 
default ©   (2004-10-01 17:37) [20]

[17]
неа, представь если список состоит из одинаковых строк и посмотри как поведёт себя алгоритм
есть смысл подправить на
until i >= Memo1.Lines.Count-1;
лучше [18]


 
begin...end ©   (2004-10-01 20:04) [21]


> [20] default ©   (01.10.04 17:37)

Да, не подумал я как следует, извиняюсь.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.10.17;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.052 c
14-1096315452
Луарвик
2004-09-28 00:04
2004.10.17
ЧТО ТАКОЕ САБЖ???


4-1094719924
MooSE
2004-09-09 12:52
2004.10.17
Как заставить exe-файл удалять самого себя?


3-1095420833
Ceval
2004-09-17 15:33
2004.10.17
как организовать фильтрацию по полям Character и Numeric


14-1096277367
gn
2004-09-27 13:29
2004.10.17
Я просто тащусь с некрасота чесное слово ;-)


1-1096562993
Grigoryan
2004-09-30 20:49
2004.10.17
Как узнать кем создан файл, пользователем или системой?





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