问题描述
假设我有一组记录,我想根据记录中的一个字段对其进行排序.实现这一目标的最佳方法是什么?
Say I have an array of records which I want to sort based on one of the fields in the record. What's the best way to achieve this?
TExample = record
SortOrder : integer;
SomethingElse : string;
end;
var SomeVar : array of TExample;
推荐答案
您可以将指向数组元素的指针添加到TList
,然后调用TList.Sort
用一个比较函数,最后创建一个新数组,并按照需要的顺序将值从TList中拷贝出来.
You can add pointers to the elements of the array to a TList
, then call TList.Sort
with a comparison function, and finally create a new array and copy the values out of the TList in the desired order.
但是,如果您使用的是下一个版本 D2009,则有一个新的集合库可以对数组进行排序.它采用可选的 IComparer
实现来自定义排序顺序.这是针对您的特定情况的操作:
However, if you're using the next version, D2009, there is a new collections library which can sort arrays. It takes an optional IComparer<TExample>
implementation for custom sorting orders. Here it is in action for your specific case:
TArray.Sort<TExample>(SomeVar , TDelegatedComparer<TExample>.Construct(
function(const Left, Right: TExample): Integer
begin
Result := TComparer<Integer>.Default.Compare(Left.SortOrder, Right.SortOrder);
end));
这篇关于排序数组的最佳方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!