我想创建一个表,每行包含一个整数和一个字符串。该表应按整数排序。最终目标是提取具有最小关联整数的“n”字符串。
TStringlist不是很正确,因为它只是一个字符串。它们具有名称 - 值对,但它们按错误的顺序排序 - 我想要按名称排序的值名称。 TDictionary没有排序,无法排序(除了哈希,它们是)
我想我可以将整数格式化为足够长的字符串以保存带有前导零的最大整数,并将其连接到TStringList中其余字符串数据的开头,但这看起来很难看。是否有更优雅的方法来实现此表,按整数部分排序?
答案 0 :(得分:2)
字符串列表仍然有效,只需将整数转换为对象字段即可。
function SortStringListByObject(List: TStringList; Index1, Index2: Integer): Integer;
begin
if Integer(List.Objects[Index1]) = Integer(List.Objects[Index2])
then result := 0
else
if Integer(List.Objects[Index1]) < Integer(List.Objects[Index2])
then result := -1
else result := 1;
end;
procedure TForm3.Button1Click(Sender: TObject);
var
sl: TStringList;
x: Integer;
begin
StartTime := Now;
sl := TStringList.Create;
try
// add some objects (and strings)
sl.AddObject('One',TObject(3));
sl.AddObject('Two',TObject(2));
sl.AddObject('Three',TObject(1));
// sory by my function
sl.CustomSort(SortStringListByObject);
// show results
for x := 0 to sl.count-1 do begin
Memo1.lines.Add(sl[x]);
end;
finally
sl.Free;
end;
end;