我想以前有人问过这个答案,所以我搜索了,但找不到任何东西。诚然,有大量的 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)
}
}
}
,但在实际应用中,范围集可能要大得多,嵌套减少这种方式会变得非常难看。有没有更好的办法?