使用的 Delphi 版本:2007
你好,
我有一系列 Tecord
TInfo = Record
Name : String;
Price : Integer;
end;
var Infos : Array of Tinfo;
我正在寻找一种对Infos
数组进行排序的方法,并找到了我认为是一种聪明的方法。基本上,我有一个 TList,我在其中添加指向数组每个单元格的指针;然后,我使用自定义排序功能对它们进行排序。然后,此 TList 用于在设置为 的情况下显示已排序的TListView
单元OwnerData
格true
。
var SortedInfo : TList;
...
function CompareInfo(Item1, Item2: Integer): Integer;
var
i, j : integer;
begin
i := Integer(Item1);
j := Integer(Item2);
Result := CompareText(Infos[i].Name, Infos[j].Name);
end;
...
for I := 0 to Length(Infos) - 1 do SortedInfo.Add(Pointer(I));
SortedInfo.Sort(@CompareInfo);
...
procedure InfoHandlerData(Sender: TObject; Item: TListItem);
begin
Item.Caption := Infos[Integer(SortedInfo[Item.Index])].Name;
Item.SubItems.Add(IntToStr(Infos[Integer(SortedInfo[Item.Index])].Price);
end;
现在,我希望能够在保持指针排序的同时添加和删除单元格。现在,这是我的问题。
- 当我添加一个单元格时,我必须调用整个指针列表
SortedInfo.Sort(@CompareInfo);
- 当我删除一个单元格时,我必须清理我的 TList,重建指针列表并再次对其进行排序。
现在,我没有大量的单元格,所以没有性能问题。但是,在我删除单元格时重建指针并在每次数组更改时对所有指针进行排序对我来说似乎是错误的。如果我的问题看起来很愚蠢,我很抱歉,但我正在努力学习。
有没有正确的方法来保持我的数组排序?我不确定我应该如何“单独”对新单元格进行排序,或者我应该如何在删除单元格时保持指针有效......