【发布时间】:2020-12-03 05:12:33
【问题描述】:
我有如下代码
var searchValues = new double[] { 21.1, 21.65, 22.2, 22.75, 23.3, 23.85, 24.4, 24.95, 25.5, 26.05, 26.6, 27.15, 27.7, 28.25, 28.8, 29.35, 29.9, 30.45, 31, 31.55, 32.1, 32.65, 33.2, 33.75, 34.3, 34.85, 35.4, 35.95 };
var searchValue = 22;
double nearest = searchValues .Select(p => new { Value = p, Difference = Math.Abs(p - searchValue ) })
.OrderBy(p => p.Difference)
.First().Value;
此代码返回 22.2 。但是我希望结果是接近 22 的最小值,即 21.65。我如何实现这一目标?我对 C# 比较陌生,希望能得到一些帮助。
【问题讨论】:
-
一个值一般不能同时是“最接近X”和“具有最小绝对值”...请重新阅读问题,看看有没有edit可以阐明你想要达到的目标(不应该是“只看小于 X 的值”)
-
如果
searchValue是10,预计最接近的值是多少? -
仅通过阅读标题并查看输入参数,我不清楚你想用最后一部分实现什么。
-
如果您只需要小于 searchValue 的值,您可以将 where 子句应用于您的搜索:
double nearest = searchValues.Where(x => x < searchValue).Select(p => new{Value = p, Difference = Math.Abs(p - searchValue)}).OrderBy(p => p.Difference).First().Value;。并不是说如果没有找到更小的值,这将失败。你必须检查一下。如果这不是您要找的,我也没有得到您的实际问题,因为 21.65 是最接近的数字,没有任何其他条件。 -
正如@AlexeiLevenkov 已经说过的那样,请重新编写您的问题,以便其他人容易理解您在寻找什么。您正在寻找
"closest value which is less than X"。你的代码和输入,预期的输出是在说别的东西