2

一連の値を持つ大きな配列があります。場所 x の値が場所 x + 距離の値に影響を与えるかどうかを確認するには、すべてのペアを見つけたい

pair = [values[x], values[x+1]]

次のコードが機能します

pairs_with_distance = []
values.each_cons(1+distance) do |sequence| 
  pairs_with_distance << [sequence[0], sequence[-1]]
end

でも複雑そうで、もっと短くすっきりさせたらどうだろう

4

1 に答える 1

2

直接使用してコードを短くすることができますmap:

pairs_with_distance = values.each_cons(1 + distance).map { |seq| 
  [seq.first, seq.last]
}

私は以下の例のようなものを好みます。コードの行が短くて読みやすく、ステップが分かれているためです。つまり、中間の計算に意味のある名前を付けることができるアプローチです (groupsこの場合)。アプリケーションの実際のドメインに基づいて、より適切な名前を思い付くことができるでしょう。

values   = [11,22,33,44,55,66,77]
distance = 2

groups = values.each_cons(1 + distance)
pairs  = groups.map { |seq| [seq.first, seq.last] }

p pairs
于 2013-05-05T22:56:03.923 に答える