以前にこの答えを聞いたことがあると思ったので検索しましたが、何も見つかりませんでした。確かに、Ruby配列に関する質問はたくさんあるので、そこにあるかもしれません。
いずれにせよ、私は範囲の外積を減らして、いくつかの条件のセットを満たす外積のすべての要素の合計を返すようにしています。簡単な例を作成するには、次のような配列がある場合:
[0..1,0..1,0..1]
このセットを繰り返したいと思います。
[
[0,0,0],
[0,0,1],
[0,1,0],
[0,1,1],
[1,0,0],
[1,0,1],
[1,1,0],
[1,1,1]
]
条件""に基づいて合計を返しますreturn 1 if i[0] == 1 and i[2] == 0
(これにより2が得られます)。私の考案した例では、次のように行うことができます。
br = 0..1
br.reduce(0){|sumx, x|
sumx + br.reduce(0){|sumy, y|
sumy + br.reduce(0){|sumz, z|
sumz + (x == 1 and z == 0 ? 1 : 0)
}
}
}
、しかし実際のアプリケーションでは、範囲のセットははるかに大きくなる可能性があり、そのようにネストを減らすとかなり醜くなります。もっと良い方法はありますか?