德尔福的版本时: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,重建指针列表并重新排序。
现在,我没有大量的单元,所以没有性能问题。然而,当我删除一个单元格并重新排列指针时,重新编译指针全部指针每次数组更改对我来说似乎都是错误的。如果我的问题看起来很愚蠢,我很抱歉,但我正在努力学习。
有没有正确的方法来保持我的数组排序?我不知道我应该如何“单独”对新单元格进行排序,或者如何在删除单元格时保持指针有效...
是的,你应该在插入排序的位置,而不是每次添加后进行昂贵的排序算法的新元素。 – OnTheFly 2013-04-30 19:22:15
实现一个链接列表,而不是使用Array或TList – 2013-04-30 19:35:40
@Tony这是一个简单的插入数据结构。放弃随机访问是疯狂的这种情况。 – 2013-04-30 19:41:34