![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
StringList
321 © (2009-02-18 16:45:00)Есть список, который сортирую по 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 17:18:00) [1]
>
> Подскажите, пожалуйста как вывести вместе с последней строкой,
> а то я совсем запутался.
>
> ShowMessage должен выводится 3 раза:
>
> 1 раз DEGA
> 2 раз HFB
> 3 раз JC
>
Неужели настолько тяжело подумать?
Ega23 (2009-02-18 17:17:00) [2]
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);
321 (2009-02-18 17:13:00) [3]
> Попадает, только ты её в приведённом коде не показываешь.
Подскажите, пожалуйста как вывести вместе с последней строкой, а то я совсем запутался.
ShowMessage должен выводится 3 раза:
1 раз DEGA
2 раз HFB
3 раз JC
Плохиш (2009-02-18 17:09:00) [4]
> 321 (18.02.09 17:00) [2]
>
> Чето не получается все равно, последняя запись в списке
> не попадает
Попадает, только ты её в приведённом коде не показываешь.
321 (2009-02-18 17:00:00) [5]Чето не получается все равно, последняя запись в списке не попадает
Вот весь код:
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;
Ega23 (2009-02-18 16:52:00) [6]
id := Integer(L.Objects[0]);