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

Вниз

Дубликаты в ListBox   Найти похожие ветки 

 
K@KTUS ©   (2007-02-17 00:14) [0]

Подскажите как найти и удалить повторяющиеся строки из ListBox"a.


 
Германн ©   (2007-02-17 01:10) [1]

with ListBox do
 for i:=Count-1 downto 1 do
   if Items.IndexOf(Items.String[i]) >= 0 then Items.Delete(i);


 
RASkov   (2007-02-17 01:35) [2]

procedure DeleteDuplicate(Lst: TStrings);
var N, K: integer;
begin
 K:=0;
 while K<>Lst.Count do begin
  N:=K+1;
  while N<>Lst.Count do if Lst[K] = Lst[N] then Lst.Delete(N) else INC(N);
  INC(K);
 end;
end;
.......
DeleteDuplicate(ListBox1.Items);


 
Loginov Dmitry ©   (2007-02-17 10:23) [3]


 procedure TForm1.Button1Click(Sender: TObject);
 var
   I: Integer;
   AList: TStringList;
 begin
   AList := TStringList.Create;
   for I := 0 to ListBox1.Count - 1 do
     if AList.IndexOf(ListBox1.Items[I]) < 0 then
       AList.Add(ListBox1.Items[I]);
   ListBox1.Items.Assign(AList);
   AList.Free;
 end;


 
BOA_KAA ©   (2007-02-17 15:59) [4]


> Германн ©   (17.02.07 01:10) [1]

это не си. Границы цикла for нельзя менять :)


 
Loginov Dmitry ©   (2007-02-17 16:05) [5]

> [4] BOA_KAA ©   (17.02.07 15:59)


Хотя приведенный в [1] код по сути бесполезен, однако никакие границы там не меняются.


 
RASkov   (2007-02-17 16:13) [6]

> [5] Loginov Dmitry ©   (17.02.07 16:05)

Вообщето меняется... Count же убывает... имхо.

> [4] BOA_KAA ©   (17.02.07 15:59)

А что будет то?

for n:= ListBox.Items.Count-1 downto 0 do ListBox.Items.Delete(n);
нормально работает...


 
BOA_KAA ©   (2007-02-17 16:19) [7]

в данном случае меняется не явно. Поэтому компилятор пропустит. Однако, реальна ситуация с выходом за пределы списка с АВ, соответственно


 
RASkov   (2007-02-17 16:37) [8]

> [7] BOA_KAA ©   (17.02.07 16:19)

походу нифика ничего не меняется
 K:=1;
 for N:= 0 to K do begin
   ListBox.Items.Add(IntToStr(K));
   INC(K, 5);
 end;
Т.е. переменная K свое значение внутри цикла меняет, а граница цикла как была до вызова так и остается такой же во время цикла.
Фик его знает как оптимизатор с комппилятором мудрят.


 
Юрий Зотов ©   (2007-02-17 16:51) [9]

> BOA_KAA ©   (17.02.07 16:19) [7]

Выражения инициализации цикла for вычисляются только один раз, перед его началом. Поэтому выхода за пределы списка не будет. Он был бы в возрастающем цикле, а в убывающем все ОК.

> Loginov Dmitry ©   (17.02.07 16:05) [5]

Полезен, только надо добавить проверку InsexOf <> i. Фокус в том, что цикл идет с конца, а IndexOf ищет с начала.


 
Observer ©   (2007-02-17 16:51) [10]

а как подсчитать количество одинаковых строк в ListBOx


 
default ©   (2007-02-17 17:01) [11]

Observer ©   (17.02.07 16:51) [10]
http://delphimaster.net/view/2-1171716731/


 
Германн ©   (2007-02-18 01:02) [12]


> Юрий Зотов ©   (17.02.07 16:51) [9]
> ...
> только надо добавить проверку InsexOf <> i

Да. Дал Маху. Признаюсь :)
Привожу исправленный вариант:
with ListBox do
 for i:=Count-1 downto 1 do begin
   k:=Items.IndexOf(Items.String[i]);
   if (k <> i) and (k >= 0) then Items.Delete(i);
 end;


 
Германн ©   (2007-02-18 01:14) [13]


> Германн ©   (18.02.07 01:02) [12]
>

Блин. Спешу, не думая :(
with ListBox do
for i:=Count-1 downto 1 do
  if Items.IndexOf(Items.String[i]) <> i then Items.Delete(i);


 
Loginov Dmitry ©   (2007-02-18 08:53) [14]

> [13] Германн ©   (18.02.07 01:14)


Фантастика! :))


 
RASkov   (2007-02-18 14:30) [15]

> [14] Loginov Dmitry ©   (18.02.07 08:53)

Фокусники...:) (> Фокус в том, что.... ) [9] Юрий Зотов ©



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

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

Наверх




Память: 0.49 MB
Время: 0.041 c
15-1174288578
novoalex
2007-03-19 10:16
2007.04.15
Сабж. Про приборы учета.


15-1174567505
xman
2007-03-22 15:45
2007.04.15
StarTeam


15-1174573539
Чапаев
2007-03-22 17:25
2007.04.15
А почему...


5-1151158278
PRT
2006-06-24 18:11
2007.04.15
DelhiX в Delphi 7


15-1174580802
eXPell
2007-03-22 19:26
2007.04.15
Имхо, простой вопрос:(





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский