【问题标题】:How to get max value from list of doubles that are less than an input value using IEnumerable.Max extensions如何使用 IEnumerable.Max 扩展从小于输入值的双精度列表中获取最大值
【发布时间】:2016-09-22 08:18:56
【问题描述】:

我正在尝试从双精度列表中获取最大值,该值低于特定输入值。 代码:

List<double> tmpList = new List<double> { 1.2d, 2.8d, 3.4d, 0.4d, 6.3d };
double inputValue = 3.1d;
int countOfValuesBelowInput = tmpList.Count(z => z < inputValue); // this works
double maxBelowInput = tmpList.Max(z => z < inputValue); // compile error 

我在最后一行收到编译错误 - 说“无法将 bool 隐式转换为 double”。我做错了什么?感谢任何帮助,如果这是重复的,我们深表歉意 - 尽我所能去谷歌。

【问题讨论】:

  • 试试tmpList.Where(z =&gt; z &lt; inputValue).Max()

标签: c# max ienumerable extension-methods


【解决方案1】:

您可以在获取最大值之前使用Where 过滤列表,如下所示:

double maxBelowInput = tmpList.Where(z => z < inputValue).Max();

您当前代码不起作用的原因是您正在使用的Max 的重载需要一个选择器,而不是一个谓词

选择器是一个函数,它获取项目并输出相关值,通常是项目的属性。例如,如果列表的类型为Person,则可以使用.Max(x =&gt; x.Age) 获取人员的最大年龄。在这里,您从每个元素中选择一些东西。

另一方面,Count 接受一个谓词,它基本上是一个过滤器。它是一个接受项目并返回truefalse 的函数。

【讨论】:

  • 谢谢!这很有帮助。
猜你喜欢
  • 2019-01-14
  • 2020-03-07
  • 2018-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-09
  • 2023-04-09
相关资源
最近更新 更多