Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Быстрое удаление дупликатов


perov ©   (2002-06-11 10:05:00) 

есть stringlist, содержащий несколько десятков тысяч строк
как можно быстро удалить дупликаты строк?
сортировку использовать нельзя...


perov   (2002-06-11 11:32:00) [1]

to kaif
наверное можно, но придется перелопачивать большой проект (чужой)
to afrolov
примерно так и поступил, только с использованием двух дополнительных списоков: один отсортированный уникальный. в него из первого копируются данные . получаем список с уникальными значениями. потом из исходного копируем только те строки, номера которых содержаться во втором списке


Romkin   (2002-06-11 11:28:00) [2]

Сделать другой TStringList Sorted := true
потом присвоить StringList2.Text := StringList1.text;
Получиться упорядоченный список
Пройти этот список и удалить дупликаты в исходном


kaif   (2002-06-11 11:19:00) [3]

А нельзя при добавлении в исходный списокпросто не пускать туда дубликат?
Например:
if stringlist.IndexOf(s) = -1 then
stringlist.Add(s);
Тогда потом не придется их отыскивать...


AFROLOV   (2002-06-11 10:46:00) [4]

Есть такое предложение.
1. создаем новый список
2. в него записываем строку и ее номер в с тринглист.
3. сортируем новый список по строковому полю.
4. наполнение нового списка делаем следующим образом:

tmpStr:="";
for i:=0 to SortedList.Count do
begin
if SortedList[i].Str<>tmpStr then
begin
tmpStr:=SortedList[i].Str;
NewList[SortedList[i].Index]:=tmpStr;
end;

end;


MBo   (2002-06-11 10:39:00) [5]

for i:=StrinList.Count-1 downto 1 do
if StringList.IndexOf(StringList[i])<>i then
StringList.Delete(i);


Наверх

Титульная страница Поиск, карта сайта Написать письмо