簡體   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