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

Вниз

StringList   Найти похожие ветки 

 
321   (2009-02-18 16:45) [0]

Есть список, который сортирую по Object:

 
 L := TStringList.Create;
 L.AddObject("A", TObject(84));
 L.AddObject("B", TObject(86));
 L.AddObject("C", TObject(87));
 L.AddObject("D", TObject(384));
 L.CustomSort(@_Sort);



function _Sort(List: TStringList; Index1, Index2: Integer): Integer;
 var
   i1, i2: Integer;
 begin
   i1 := Integer(List.Objects[Index1]);
   i2 := Integer(List.Objects[Index2]);
   if i1 < i2 then
     Result := -1
   else if i1 > i2 then
     Result := 1
   else
     Result := 0;
 end;


Нужно сформировать строки исходя из Object списка, те:

список сортируется =>

"D" 84
"A" 84
"B" 86
"C" 86

Теперь проходя по списку нужно выводить

D, A
B
C

Делаю так, но что-то не получается


id := -1;
 s := "";
 for i := 0 to L.Count - 1 do
 begin
   if (Integer(L.Objects[i]) <> id) then
   begin
     ShowMessage(s);
     id := Integer(L.Objects[i]);
     s := L[i];
   end
   else
    s := s + L[i];
 end;


 
Ega23 ©   (2009-02-18 16:52) [1]

id := Integer(L.Objects[0]);


 
321   (2009-02-18 17:00) [2]

Чето не получается все равно, последняя запись в списке не попадает
Вот весь код:


procedure TForm1.Button1Click(Sender: TObject);

 function _Sort(List: TStringList; Index1, Index2: Integer): Integer;
 var
   i1, i2: Integer;
 begin
   i1 := Integer(List.Objects[Index1]);
   i2 := Integer(List.Objects[Index2]);
   if i1 < i2 then
     Result := -1
   else if i1 > i2 then
     Result := 1
   else
     Result := 0;
 end;

var
 L: TStringList;
 i, id: Integer;
 s, olds: string;

begin
 L := TStringList.Create;
 L.AddObject("A", TObject(84));
 L.AddObject("B", TObject(86));
 L.AddObject("C", TObject(87));
 L.AddObject("D", TObject(84));
 L.AddObject("E", TObject(84));
 L.AddObject("F", TObject(86));
 L.AddObject("G", TObject(84));
 L.AddObject("H", TObject(86));
 L.AddObject("J", TObject(87));
 L.CustomSort(@_Sort);

 id := Integer(L.Objects[0]);
 s := "";
 for i := 0 to L.Count - 1 do
 begin
   if (Integer(L.Objects[i]) <> id) then
   begin
     olds := s;
     id := Integer(L.Objects[i]);
     s := L[i];
     ShowMessage(olds + #13#10 + s);
   end
   else
    s := s + L[i];
 end;
end;


 
Плохиш ©   (2009-02-18 17:09) [3]


> 321   (18.02.09 17:00) [2]
>
> Чето не получается все равно, последняя запись в списке
> не попадает

Попадает, только ты её в приведённом коде не показываешь.


 
321   (2009-02-18 17:13) [4]


> Попадает, только ты её в приведённом коде не показываешь.

Подскажите, пожалуйста как вывести вместе с последней строкой, а то я совсем запутался.

ShowMessage должен выводится 3 раза:

1 раз DEGA
2 раз HFB
3 раз JC


 
Ega23 ©   (2009-02-18 17:17) [5]


id := Integer(L.Objects[0]);
s := "";
for i := 0 to L.Count - 1 do
begin
 if (Integer(L.Objects[i]) = id) then
   s := s + " "
 else
   s := s + #13#10;

 s := s + L[i];
 id := Integer(L.Objects[i]);
end;

ShowMessage(s);


 
Ega23 ©   (2009-02-18 17:18) [6]


>
> Подскажите, пожалуйста как вывести вместе с последней строкой,
>  а то я совсем запутался.
>
> ShowMessage должен выводится 3 раза:
>
> 1 раз DEGA
> 2 раз HFB
> 3 раз JC
>


Неужели настолько тяжело подумать?



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

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

Наверх




Память: 0.48 MB
Время: 0.022 c
15-1233818505
Slider007
2009-02-05 10:21
2009.04.05
С днем рождения ! 31 января 2009 суббота


2-1235055783
Denis__
2009-02-19 18:03
2009.04.05
Сообщение, приходящее при клике левой кнопкой мыши


1-1209297887
Volk
2008-04-27 16:04
2009.04.05
помогите


1-1209392487
ZENsan
2008-04-28 18:21
2009.04.05
DesignIntf, DesignEditors...


2-1234501240
dark_volk
2009-02-13 08:00
2009.04.05
Копирование таблиц