对通用列表进行排序

时间:2012-09-20 18:32:47

标签: .net vb.net linq generics sorting

我有一个MyObject类,其中包含CreationDate As Date属性。

获取按CreationDate List(Of MyObject)排序的最佳方法是什么?

更快的方式和最高效的方式。

3 个答案:

答案 0 :(得分:4)

使用LINQ你可以使用:

Dim sorted = unsorted.OrderBy(Function(x) x.CreationDate) _
                     .ToList()

编辑:如果您已经有List(Of T),则可以使用就地Sort方法和自定义比较器。 可能更快。它可能不会。我怀疑它不太可能是重要的性能差异,这是你应该关注的。

根据经验,我建议:

  • 找出构成“充分”表现的内容
  • 以最易读的方式编写代码(可能是LINQ而不是自定义比较器,IMO)
  • 衡量该代码
  • 如果不够,请尝试另一种方法,并对其进行衡量。比较性能差异与可读性/可维护性的差异。

答案 1 :(得分:3)

列表有一种排序方法。它的一个重载允许指定比较

unsorted.Sort(Function(x, y) x.CreationDate.CompareTo(y.CreationDate))

答案 2 :(得分:0)

您可以实施IComparer界面并定义Compare方法来检查MyObject对象的日期:

public class MyObjectComparer<T> : IComparer<T>
{
    public int Compare(MyObject firstObject, MyObject secondObject)
    {
        return firstObject.CreationDate.Compare(secondObject.CreationDate);
    }
}

注意:我假设您的CreationDate类型为DateTime,但您可以根据需要实施比较功能。

然后根据您的Comparer列出您的列表:

myListObject.Sort(new MyObjectComparer<MyObject>());