C# 仅当值为'时,才查找最接近x的值;s小于x

C# 仅当值为'时,才查找最接近x的值;s小于x,c#,linq,C#,Linq,我有很多替身。如何找到最接近某个输入值的值而不高于该输入值。首先对它们进行排序(有很多方法可以做到这一点)。然后对要查找的数字进行二进制搜索。在CSharp中,可以使用linq更轻松地实现它 var result = doubleArray.Where(p => p < inputValue).OrderByDescending(p => p).FirstOrDefault(); var result=doubleArray.Where(p=>pp).FirstOrDefau

我有很多替身。如何找到最接近某个输入值的值而不高于该输入值。

首先对它们进行排序(有很多方法可以做到这一点)。然后对要查找的数字进行二进制搜索。

在CSharp中,可以使用linq更轻松地实现它

var result = doubleArray.Where(p => p < inputValue).OrderByDescending(p => p).FirstOrDefault();
var result=doubleArray.Where(p=>pp).FirstOrDefault();
在C中使用LINQ#

//假设值是IEnumerable
值=值。其中(v=>v
publicstaticintcheckclosest(inttarget)
{
int closestVal=0;
for(int i=0;iclosestVal)closestVal=thing[i];
返回closestVal;
}

还没有。我想从x中减去每个元素,然后检查产生最小差异的元素,但我认为有一种更简单的方法。有什么比单独检查每个元素更简单?你不应该做的是对输入数组进行排序,而你可以在一个过程中计算它,即O(N Log N)。简单的线性扫描是O(N).Touche.这是非常正确的。但是如果你按照我的方式来做,代码可能会比使用线性扫描更简短,可读性更强。我想我可以用两行Java来完成它(看起来@Scott只用了一行C#)。OP没有明确说明可伸缩性或可读性是否更重要,因此我选择了最终更具可读性的答案。呵呵,在我看到这里的LINQ示例之前,我不确定它是否会更具可读性!这是我在快速浏览时唯一有信心阅读的示例,接下来可能会出现您假设的解决方案。:)呵呵。就像我说的,排序没有错,只是最好有一些其他令人信服的理由来排序,以证明成本的合理性……在发布之前,您是否尝试过您的代码?除了给出错误的结果,它甚至没有编译。我一直都在写这样的东西。但是没有,你想让我去吗?如果它不起作用,我相信你无论如何都能找到答案。添加一个
abs()
fabs()
或任何与绝对值C#等价的东西,这看起来像是赢家。:)顺便说一句,它是java<代码>东西
就是你的数组。它的条件是,如果
thing[i]
小于您的目标值,并且大于到目前为止找到的最接近的值。
我一直在写这样的东西。你应该在这方面多做些工作:)我喜欢这个。我对C#很陌生。我已经用C++和java编程了。我会试试这个。我会将第二行更改为
返回值。Any()@BrokenGlass不错,不知道为什么我从来没有考虑过使用Any()来测试非空性。总是假设它需要一个条件。更新,谢谢!现在,5年后,我认为
返回值.Max(x=>x
// Assuming values is IEnumerable<double>
values = values.Where(v => v <= input);

return values.Any() ? values.Max() : resultWhenInputTooSmall;
public static int checkClosest(int target)
{
    int closestVal = 0;

    for(int i = 0; i < thing.length; i++)
        if(thing[i] < target && thing[i] > closestVal) closestVal = thing[i];
    return closestVal;
}