我做了一个简化的演示(带有伪结构)来说明我需要什么:
type
TMyRec = record
GroupID: Integer;
Color: TColor;
end;
TMyRecArray = array of TMyRec;
我的输入数组/列表元素由非零 GroupID 组成。它们始终按 GroupID 分组(但未排序且无法排序):
GroupID
-------
2
2
2
1
1
3
3
etc...
每个元素都有一个Color
. 我的输出应按 GroupID 分组,应如下所示(每个组是clRed
/ clGreen
- 依次交替):
GroupID ; Color
------- -----
2 ; clRed
2 ; clRed
2 ; clRed
1 ; clGreen
1 ; clGreen
3 ; clRed
3 ; clRed
etc...
9 ; clGreen
7 ; clRed
7 ; clRed
我使用代码:
procedure TForm1.Button1Click(Sender: TObject);
var
R: TMyRecArray;
I: Integer;
S: string;
OldId: Integer;
begin
// populate some data
SetLength(R, 7);
R[0].GroupID := 2;
R[1].GroupID := 2;
R[2].GroupID := 2;
R[3].GroupID := 1;
R[4].GroupID := 1;
R[5].GroupID := 3;
R[6].GroupID := 3;
OldId := 0;
for I := 0 to High(R) do
begin
if OldId <> R[I].GroupID then
begin
OldId := R[I].GroupID;
R[I].Color := clRed;
end
else
begin
R[I].Color := clGreen;
end;
end;
Memo1.Clear;
for I := 0 to High(R) do
begin
ColorToIdent(R[I].Color, S);
Memo1.Lines.Add(Format('%d ; %s', [R[I].GroupID, S]));
end;
end;
结果不正确:
2 ; clRed
2 ; clGreen
2 ; clGreen
1 ; clRed
1 ; clGreen
3 ; clRed
3 ; clGreen
我错过了什么?我知道解决方案很简单,但我就是想不通。
限制:我只能迭代一次;我无法提前阅读/以前的记录。