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];
    }
}

の 1 つの値some_varは 30 で、次の値は 40 で、次の値は 50 でcompare_var42 です。

42 は 40 未満ではないため、42 未満であっても 30 を返しません。これは、42 未満であり、42 が 50 未満であるため、40 を返すことも意味します。

編集:

誰かが言及したように、コード変換は SE.so には最適ではありません。明確にするために、ルビーでいくつかの異なることを試しました。私は 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 に答える