Форум: "Начинающим";
Текущий архив: 2009.04.05;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.009 c