![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Удалить одинаковые строки из listbox
Xper © (2002-07-19 23:40:00)В listbox есть список строк:
r123
r456
r789
r123
r098
r456
Так вот, нужно найти одинаковые строки и удалить их! В данном случае это строки: r123, r456. Я очень начинающий Делфист. По-разному пробовал и никак не получается решить мою проблему. Помогите пожалуйста исходником.
ipLenin (2002-07-23 11:39:00) [1]А не легче добавлять сначала строки не listbox, а в TStringList, у которого установить свойство Duplicates = dupError.
Теперь если добавляется повторное значение в TStringList, то будет генериться ошибка. Соответственно если ошибки нет, то эту строку можно добавлять в listbox, так как ее там еще нет.
И все. Не надо никаких сортировок массивов или переборов.
Xper (2002-07-20 13:31:00) [2]Спасибо, Proton! Этот алгоритм работает и соответсвенно меня устраивает. Спасибо еще раз.
Proton (2002-07-20 12:19:00) [3]2MrBeer
да ну вас
не нравится не пользуйтесь
от мигания можно избавтся отключив обновление
ListBox1.Items.BeginUpdate
и
ListBox1.Items.EndUpdate
я лично предпочитаю короткий код нежели супер быстрому решению в три листа
5000 строк мой код даже на самом медленном тормозе обработает так что юзер даже не заметит
если же надо с большими обемами информации работать то данные ни один стоящий програмист в лист
боксе хранить не станет, а вотстольуется базой данных - а там это выборка решается простым SQL
запросом.
Ps пить надо меньше
PPS нерод идет на форум в первую очерендь за готовым решением, а не за советами (иногда
бесполезными)
PPPS если есть возможность попробуйте писать все таки на русском, а то маразам каккойто одно
слово русское, второе английское
2Xper
не забудьте про использование AnsiUPperCase и TRIM - может помочь
в предложении MrBeer есть свой смысл - сортируеш его по примеру quicksort и идеш по списку
1) если предыдущая запись равна текущей - значить удаляем текущую
2) если нет то переходим на след запись
MrBeer (2002-07-20 06:26:00) [4]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 04:31:00) [5]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 не забудь проверить удалается ли первые и последние строки
Viewer (2002-07-20 00:35:00) [6]Лучше их не вставлять, т.е. на этапе добавления отсекать.