如何排序多个列表属性?

时间:2014-11-22 19:33:09

标签: c# linq list

我有列表列表myList,它有超过1200万个元素。 myClass有两个属性,即。 “gt”和“gm”。 我想找到最大的“gt”元素并选择具有min“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元素。 我可以从哪里开始?以高效的方式排序降序排序?

2 个答案:

答案 0 :(得分:2)

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;
        });

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

答案 1 :(得分:0)

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