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

C# 如何对多个列表属性进行排序?,c#,linq,list,C#,Linq,List,我有超过1200万个元素的列表。myClass有两个属性,即“gt”和“gm”。 我想找到最大的“gt”元素,然后选择最小的“gm”。 例如: 让我列出如下内容:(第一列是gt,另一列是gm) 我想得到一个myClass元素,它的gt=8,gm=2。 我从哪里开始?按降序排序gt是一种有效的方法吗?有一种Array.Max()方法,只要您将列表转换为数组(例如,使用此处解释的List.ToArray()方法:)。 问候, 一种更有效但可读性更低的方法是使用Enumerable.Aggregate

我有超过1200万个元素的列表。myClass有两个属性,即“gt”和“gm”。 我想找到最大的“gt”元素,然后选择最小的“gm”。 例如: 让我列出如下内容:(第一列是gt,另一列是gm)

我想得到一个myClass元素,它的gt=8,gm=2。
我从哪里开始?按降序排序gt是一种有效的方法吗?

有一种
Array.Max()
方法,只要您将列表转换为数组(例如,使用此处解释的
List.ToArray()
方法:)。 问候,

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

var seed=myList.First()
myList.骨料(种子、,
(最大值,项目)=>{
如果(item.gt>max.gt)
退货项目;
如果(item.gt==max.gt&&item.gm

在使用更有效的方法之前,请衡量这两种方法,并确保可读性和性能之间的权衡是值得的。

如果要查找一个元素,排序不是一种有效的方法。O(2n)=O(n)max.gt)”处出现了“nullreferenceexception was unhandled”异常。它是空的。@Myesil这是因为您的列表包含空项。只需通过链接
.Where(item=>item!=null)
在调用
Aggregate
/
OrderByDescending
  4 1
  5 2
  7 1
  8 3
  4 3
  2 2
  8 7
  1 7
  8 2
myList.OrderByDescending(x => x.gt)                                  
      .ThenBy(x => x.gm)
      .First();
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;
        });