Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.007 c
6-13751
Vit3128
2002-05-24 15:56
2002.08.05
Как получить имя компьютера и его название!


7-13834
Alexsandr
2002-05-21 18:41
2002.08.05
Работа с портом ВВ в NT


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


3-13560
UnDISCOvery
2002-07-05 14:36
2002.08.05
База Access. Что нужно для работы с ней ?


1-13623
c0pYc@t
2002-07-25 09:42
2002.08.05
Убрать строчку из реестра




   Наверх