加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何在LINQ中执行“搜索最佳”功能?

发布时间:2020-12-15 17:14:23 所属栏目:百科 来源:网络整理
导读:问候! 我正在寻找一种方法来搜索最能满足我标准的对象的集合.由于我必须经常这样做,所以我正在研究如何使用LINQ执行查询,但是找不到一种简单的方法来做到这一点并不会“浪费时间”. 功能实现将是: collection.OrderByDescending(f = FitFunction(f)).First
问候!

我正在寻找一种方法来搜索最能满足我标准的对象的集合.由于我必须经常这样做,所以我正在研究如何使用LINQ执行查询,但是找不到一种简单的方法来做到这一点并不会“浪费时间”.

功能实现将是:

collection.OrderByDescending(f => FitFunction(f)).First()

但这似乎不必要地进行排序.我真的只需要线性扫描. Min LINQ函数返回最佳拟合,而不是产生最佳拟合的对象,因此似乎没有用.

为清楚起见,我传统上会编写非LINQ代码(并且这样做了很多次):

T best;
float bestFit = something very low;

foreach (T ob in collection)
{
  float fit = FitFunction(ob);
  if (fit > bestFit)
  {
    bestFit = fit;
    best = ob;
  }
}
return best;

我想我可能只是制作自己的扩展方法来做到这一点;但在我看来,已经有一种方法可以在LINQ中做到这一点.

谢谢!

解决方法

这本质上是一个基于谓词的Top-N问题,其中附加约束N总是等于1.不幸的是,没有内置的LINQ运算符执行TopN()操作……但正如你所指出的那样,自己写一个并不难.

MoreLINQ库有一个MaxBy()运算符的实现,它允许您指定谓词 – 并且也可以工作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读