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

Вниз

Удалить одинаковые строки из listbox   Найти похожие ветки 

 
Xper   (2002-07-19 23:40) [0]

В listbox есть список строк:
r123
r456
r789
r123
r098
r456
Так вот, нужно найти одинаковые строки и удалить их! В данном случае это строки: r123, r456. Я очень начинающий Делфист. По-разному пробовал и никак не получается решить мою проблему. Помогите пожалуйста исходником.


 
Viewer   (2002-07-20 00:35) [1]

Лучше их не вставлять, т.е. на этапе добавления отсекать.


 
Proton ©   (2002-07-20 04:31) [2]

procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
i:=0;
with ListBox1,items do
while i<count do
if IndexOf(items[i])<i then
delete(i)
else
inc(i);
end;
PS не забудь проверить удалается ли первые и последние строки


 
MrBeer ©   (2002-07-20 06:26) [3]

Algoritm v principe rabotajuschii no estj nekotorie zamechania -
1) Podobnaya realizacia mozhet vizvatj flicker na medlennih mashinah, sootv zhelatelno zablokriovatj update na ekrane vo vremya izmenenii.
2) Daleko ot optmalnogo - O(N^2) esli ne oshibajusj, esli primenitj soritirovku (naprimer shell ili quicksort) i potom vikdivatj odinakovie elementi eto uzhe blizke k O(N Log N).

best regards.


 
Proton ©   (2002-07-20 12:19) [4]

2MrBeer
да ну вас
не нравится не пользуйтесь
от мигания можно избавтся отключив обновление
ListBox1.Items.BeginUpdate
и
ListBox1.Items.EndUpdate
я лично предпочитаю короткий код нежели супер быстрому решению в три листа
5000 строк мой код даже на самом медленном тормозе обработает так что юзер даже не заметит
если же надо с большими обемами информации работать то данные ни один стоящий програмист в лист

боксе хранить не станет, а вотстольуется базой данных - а там это выборка решается простым SQL

запросом.
Ps пить надо меньше
PPS нерод идет на форум в первую очерендь за готовым решением, а не за советами (иногда

бесполезными)
PPPS если есть возможность попробуйте писать все таки на русском, а то маразам каккойто одно

слово русское, второе английское
2Xper
не забудьте про использование AnsiUPperCase и TRIM - может помочь

в предложении MrBeer есть свой смысл - сортируеш его по примеру quicksort и идеш по списку
1) если предыдущая запись равна текущей - значить удаляем текущую
2) если нет то переходим на след запись


 
Xper   (2002-07-20 13:31) [5]

Спасибо, Proton! Этот алгоритм работает и соответсвенно меня устраивает. Спасибо еще раз.


 
ipLenin   (2002-07-23 11:39) [6]

А не легче добавлять сначала строки не listbox, а в TStringList, у которого установить свойство Duplicates = dupError.
Теперь если добавляется повторное значение в TStringList, то будет генериться ошибка. Соответственно если ошибки нет, то эту строку можно добавлять в listbox, так как ее там еще нет.
И все. Не надо никаких сортировок массивов или переборов.



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

Текущий архив: 2002.08.05;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.009 c
8-13735
SPeller
2002-03-28 07:51
2002.08.05
Из JPEG в BMP


3-13527
Fissher
2002-07-13 21:44
2002.08.05
BDE


1-13607
Filat
2002-07-24 16:22
2002.08.05
Сканирование каталогов In & Out + перемещение файлов по ф6?


1-13618
andrey_pst
2002-07-25 07:53
2002.08.05
Такой вот вопрос:


3-13556
SkyR
2002-07-16 04:20
2002.08.05
Сохранение данных в TDBGrid