我需要将前十个值保持在已排序的顺序中。我的数据结构是:
TMyRecord = record
Number: Integer;
Value: Float;
end
我将计算一堆浮点值。我需要保留前10个浮点值。每个值都有一个关联的数字。我想添加“集合” ...如果我的浮点值大于前10个之一,则应将其自身添加到列表中,然后丢弃“旧的”数字10(现在为11)。我应该能够以(浮点值)排序的顺序访问列表...
它几乎像一个TStringList,它保持排序的顺序。
Delphi 2010中已经内置了类似的东西吗?
最佳答案
您可以结合使用通用列表Generics.Collections.TList<TMyRecord>
和插入排序。
您的数据结构是这样的
TMyRecord = record
Number: Integer;
Value: Float;
end;
var
Top10: TList<TMyRecord>;
您需要使用
Generics.Collections
来获取通用列表。像这样实例化它:
Top10 := TList<TMyRecord>.Create;
使用此功能添加到列表:
procedure Add(const Item: TMyRecord);
var
i: Integer;
begin
for i := 0 to Top10.Count-1 do
if Item.Value>Top10[i].Value then
begin
Top10.Insert(i, Item);
Top10.Count := Min(10, Top10.Count);
exit;
end;
if Top10.Count<10 then
Top10.Add(Item);
end;
这是插入排序的简单实现。使该算法起作用的关键是确保列表总是有序的。