1

代码:

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_var30,下一个值为 40,下一个值为 50 和compare_var42。

即使小于 42,它也不会返回 30,因为 42 不小于 40。这也意味着它会返回 40,因为它小于 42 并且 42 小于 50。

编辑:

正如有人提到的,代码翻译对于 SE.so 来说并不是很好。只是为了说清楚:我确实在 ruby​​ 中尝试了几种不同的东西。不过,我在 javascript 方面有更多经验,所以我能想到的表达我的问题的最好方法是用 javascript 写出我需要的东西,这样我就可以看到它是如何翻译成 ruby​​ 的。感谢您的回答

4

3 回答 3

3

我会使用neatoEnumerable#each_cons(n)方法

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) 的对时,您可以返回该对的第一项。

于 2012-09-26T22:27:34.177 回答
2

这是一个单行:

some_var.select{|v| v < compare_var}.max
于 2012-09-27T00:03:57.970 回答
1

去掉var关键字,把for循环改成some_var.each,你就得到了一个在 Ruby 中工作的代码。

PS。StackOverflow 中的代码翻译不正确

于 2012-09-26T22:18:52.920 回答