Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用Linq表达式获取由两个字段排序的最大项?_C#_Linq - Fatal编程技术网

C# 如何使用Linq表达式获取由两个字段排序的最大项?

C# 如何使用Linq表达式获取由两个字段排序的最大项?,c#,linq,C#,Linq,是否可以将result1作为单个linq表达式获取?我明白这可能不是最好的做法,但出于好奇,我想知道如何做到这一点 结果2有一个不同的答案,但它也是正确的。然而,它的复杂性是O(NlogN),而不是O(N) 编辑:我按问题编辑,因此一些答案可能不符。也许这可以解决您的问题: a.OrderBy(x => x.one + x.two).Last() 此查询给出相同的结果: var result = a.OrderByDescending(x => x.one + x.two)

是否可以将result1作为单个linq表达式获取?我明白这可能不是最好的做法,但出于好奇,我想知道如何做到这一点

结果2有一个不同的答案,但它也是正确的。然而,它的复杂性是O(NlogN),而不是O(N)


编辑:我按问题编辑,因此一些答案可能不符。

也许这可以解决您的问题:

a.OrderBy(x => x.one + x.two).Last()

此查询给出相同的结果:

var result = a.OrderByDescending(x => x.one + x.two)
                      .First();
但是,您可以在没有最大“一”字段的情况下获取项目。。 这一条应该有效:

var result = a.OrderByDescending(x => x.two)
               .Where(x => (x.one == a.Max(y => y.one)))
               .First();

一种方法是实现
IComparable。这一点的好处是,它仍然具有
O(N)
的复杂性,而且相当简洁。

对这两个字段的总和进行排序是您想要的吗?或者有效地计算它们的平均值?我想从一个“a”列表中得到一个最大值为“2”的单个“a”,从一个“a”的初始列表中得到最大值为“1”的单个“a”。@Johannes Rudolph:不,我不想对两个字段的总和或平均值进行排序。虽然我可以通过在具有相同“一”值的每个值范围内执行基于“一”的排序,然后执行基于“二”的排序来获得结果,但我不一定需要排序两次才能获得有效结果。很抱歉之前没有直接回答您的问题,因为在看到Jani的答案之前我不理解您的意思。或者
OrderByDescending
First
,我认为这可能会为您节省枚举的线性扫描。“不,我不希望对两个字段的总和或平均值进行排序”。。。我用了大约10行代码来完成你在一行代码中所做的事情。干得好。@Rawling Heh,谢谢你一开始就带我走过了我做错的地方。
var result = a.OrderByDescending(x => x.two)
               .Where(x => (x.one == a.Max(y => y.one)))
               .First();
var result1 = a.Max(); // 1,2,1
class A : IComparable<A>
{
    ...

    public int CompareTo(A other)
    {

        return this.one == other.one ? this.two - other.two : this.one - other.one;
    }
}