是否有可能返回列表中具有最小属性的对象
本文关键字:属性 对象 有可能 返回 列表 是否 | 更新日期: 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.