Главная страница
    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.033 c
4-1094849129
Destroyer
2004-09-11 00:45
2004.10.17
Как найти адрес нужный памяти в чужом приложении?


3-1095328408
Bolat
2004-09-16 13:53
2004.10.17
Взять значение поля с другой таблицы


6-1091698339
Jolik
2004-08-05 13:32
2004.10.17
Как определить сколько данных я могу записать в сокет...


14-1096358962
GH@ST
2004-09-28 12:09
2004.10.17
Как более грамотно решить задачу??


14-1096519899
NewDelpher
2004-09-30 08:51
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский