繁体   English   中英

如何在Ruby中重写这个JavaScript循环?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM