我需要将前十个值保持在已排序的顺序中。我的数据结构是:

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;

这是插入排序的简单实现。使该算法起作用的关键是确保列表总是有序的。

10-07 21:19