是否有可能返回列表中具有最小属性的对象

本文关键字:属性 对象 有可能 返回 列表 是否 | 更新日期: 2023-09-27 18:10:14

我的解决方案是

class Test
{
    public int X;
}    
class Program
{
    static void Main(string[] args)
    {
        var arr = new List<Test>();
        var min = arr.Min(x => x.X);
        Test a = arr.First(y => y.X == min);
    }
}

这可以在一行中完成吗(只迭代列表一次而不是两次)?

是否有可能返回列表中具有最小属性的对象

在"MoreLinq"中有一个流行的linq扩展,它提供了一个"MinBy"方法:

https://www.nuget.org/packages/MoreLinq.Source.MoreEnumerable.MinBy/

使用它,你的代码将变成:

Test a = arr.MinBy(item => item.X);

参见https://www.nuget.org/packages?q=id%3Amorelinq

我们经常在我们的许多项目中使用MoreLinq的扩展-它绝对值得。(最初由Jon Skeet和其他人撰写,我相信)

为什么不按您想要的属性升序排列序列并获得第一项呢?

arr.OrderBy(x => x.X).FirstOrDefault();

我发现这个,这是一个重复的问题

在问题中你想要一次迭代,在回答@ doctor时你说他的解决方案的性能更差,因此说性能也很重要。性能和单次迭代哪个更重要?

在这种情况下,你可以得到你想要的,但你必须在没有Linq的情况下完成。循环遍历数据,并记住x值最小的对象

var arr = new List<Test>();
Test minimum = null;
foreach (var x in arr) {
    if (minimum == null || x.X < minimum.X) {
        minimum = x;
    }
}
// minimum now contains the object with the lowest value of X.
相关文章: