Форум: "Основная";
Текущий архив: 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