代码:
var some_var = [/*.......*/];
var compare_var;
for (var i = 0; i < some_var.length - 1; i++){
if (some_var[i] <= compare_var && compare_var < some_var[i + 1]){
return some_var[i];
}
}
some_var
的一个值为30,下一个为40,下一个为50,compare_var
为42。
即使它小于42,它也不会返回30,因为42不小于40.这也意味着它将返回40,因为它小于42而42小于50。 / p>
修改:
有人提到代码翻译对于SE.so来说并不是很好。只是说清楚:我确实在ruby中尝试了几种不同的东西。我在javascript方面有更多的经验,所以我能想到的最好的方法是在javascript中写出我需要的内容,以便我可以看到它如何转换为ruby。谢谢你的回答
答案 0 :(得分:3)
我会使用neato Enumerable#each_cons(n)
method:
def foo(arr, x)
arr.each_cons(2) do |a,b|
return a if (a <= x) && (x < b)
end
nil # Not found
end
foo([30,40,50], 42) # => 40
这基本上会创建每对的“滑动窗口”,然后当您找到包含目标值(x)的对时,您可以返回该对中的第一项。
答案 1 :(得分:2)
这是一个单行:
some_var.select{|v| v < compare_var}.max
答案 2 :(得分:1)
删除var
关键字,将for
循环更改为some_var.each
,然后在Ruby中获得有效的代码。
PS。 StackOverflow中的代码转换不正确