Delphi - 什么对象(多维数组等)可以工作?

use*_*073 5 delphi structure delphi-2010

我需要按排序顺序保留前十个值.我的数据结构是:

TMyRecord = record
  Number: Integer;
  Value: Float;
end
Run Code Online (Sandbox Code Playgroud)

我将计算一堆浮点值.我需要保持前10个浮动值.每个值都有一个相关的数字.我想添加"sets"...如果我的浮点值高于前10位中的一个,它应该将自己添加到列表中,然后"旧"数字10(现在为11)被丢弃.我应该能够以(浮点值)排序顺序访问列表...

它几乎就像一个TStringList,它维护排序顺序....

Delphi 2010中是否已经内置了这样的内容?

Dav*_*nan 5

您可以使用通用列表Generics.Collections.TList<TMyRecord>和插入排序的组合.

您的数据结构是这样的

TMyRecord = record
  Number: Integer;
  Value: Float;
end;

var
  Top10: TList<TMyRecord>;
Run Code Online (Sandbox Code Playgroud)

您需要使用Generics.Collections获取通用列表.

像这样实例化:

Top10 := TList<TMyRecord>.Create;
Run Code Online (Sandbox Code Playgroud)

使用此功能添加到列表:

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;
Run Code Online (Sandbox Code Playgroud)

这是插入排序的简单实现.使该算法有效的关键是确保列表始终有序.