Форум: "Основная";
Текущий архив: 2002.08.05;
Скачать: [xml.tar.bz2];
ВнизУдалить одинаковые строки из 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.005 c