[英]How would I rewrite this JavaScript loop in Ruby?
码:
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。
编辑:
就像有人提到的那样,代码转换对SE.so来说并不是很好。 为了明确起见:我确实尝试了红宝石中的几种不同方法。 我在javascript方面有更多的经验,所以我想表达我的问题的最佳方法是在javascript中写出我需要的内容,以便可以看到它如何转换成ruby。 感谢您的回答
我会使用neato Enumerable#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)的对时,可以只返回该对的第一项。
这是单线的:
some_var.select{|v| v < compare_var}.max
摆脱var
关键字,将for
循环更改for
some_var.each
,您将在Ruby中获得一个有效的代码。
PS。 代码转换在StackOverflow中不正确
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.