gpt4 book ai didi

c# - 只需一两行即可从 C# 3.5 中的集合中返回最合适的项目

转载 作者:太空狗 更新时间:2023-10-29 19:39:41 24 4
gpt4 key购买 nike

下面是我一生中基本上写过几千次的示例代码:

// find bestest thingy
Thing bestThing;
float bestGoodness = FLOAT_MIN;
foreach( Thing x in arrayOfThings )
{
float goodness = somefunction( x.property, localvariable );
if( goodness > bestGoodness )
{
bestGoodness = goodness;
bestThing = x;
}
}
return bestThing;

而且在我看来,C# 应该已经可以在一行中完成此操作。像这样的东西:

return arrayOfThings.Max( delegate(x)
{ return somefunction( x.property, localvariable ); });

但这不会返回事物(或事物的索引,这很好),它会返回拟合优度值。

所以也许是这样的:

var sortedByGoodness = from x in arrayOfThings 
orderby somefunction( x.property, localvariable ) ascending
select x;
return x.first;

但这是对整个数组进行整体排序,可能太慢了。

这个存在吗?

最佳答案

这是您可以使用 System.Linq 执行的操作:

var value = arrayOfThings
.OrderByDescending(x => somefunction(x.property, localvariable))
.First();

如果数组可以为空,使用.FirstOrDefault();来避免异常。

你真的不知道这是如何在内部实现的,所以你不能保证这将对整个数组进行排序以获得第一个元素。例如,如果是 linq to sql,服务器会收到一个包含排序和条件的查询。它不会获取数组,然后对其进行排序,然后获取第一个元素。

事实上,除非您不调用 First,否则不会评估查询的第一部分。我的意思是这不是两步评估,而是一步评估。

var sortedValues =arrayOfThings
.OrderByDescending(x => somefunction(x.property, localvariable));
// values isn't still evaluated
var value = sortedvalues.First();
// the whole expression is evaluated at this point.

关于c# - 只需一两行即可从 C# 3.5 中的集合中返回最合适的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9814660/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com