如何对多个列表属性进行排序

本文关键字:属性 排序 列表 | 更新日期: 2023-09-27 18:31:35

我有列表myList,它有超过1200万个元素。 myClass 有两个属性,即。"gt"和"gm"。我想找到最大的"gt"元素并选择具有最小"gm"的元素。例如:让 myList 例如:(第一列是 gt 其他是 gm)

  4 1
  5 2
  7 1
  8 3
  4 3
  2 2
  8 7
  1 7
  8 2

我想获取 gt=8,gm=2 的 myClass 元素。我可以从哪里开始?排序 gt 降序是一种有效的方法吗?

如何对多个列表属性进行排序

myList.OrderByDescending(x => x.gt)                                  
      .ThenBy(x => x.gm)
      .First();

一种更有效但读取较少的方法是使用 Enumerable.Aggregate 迭代集合一次,从而在 O(n) 时间内执行:

var seed = myList.First()
myList.Aggregate(seed, 
        (max, item) => {
            if(item.gt > max.gt)
                return item;
            if(item.gt == max.gt && item.gm < max.gm)
                return item;
            return max;
        });

在使用更有效的方法之前,请同时测量两者,并确保可读性与性能的权衡是值得的。

有一个Array.Max()方法,它在您的情况下很有用,前提是您将 List 转换为数组(例如,使用 List<T>.ToArray() 方法,如此处所述:http://msdn.microsoft.com/en-us/library/x303t819%28v=vs.110%29.aspx)。问候