Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.17;
Скачать: CL | DM;

Вниз

Удаление повторений в 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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.047 c
3-1095829971
RavenD
2004-09-22 09:12
2004.10.17
Почему двойной Last?


14-1096344369
КаПиБаРа
2004-09-28 08:06
2004.10.17
Настройка оперы


6-1090086995
AlexeyM
2004-07-17 21:56
2004.10.17
Использование CGI


1-1096378968
Lord_Prizrak
2004-09-28 17:42
2004.10.17
Плагины.


14-1096254807
Soft
2004-09-27 07:13
2004.10.17
Лохотрон форева: Антенный Усилитель