我试图迭代一个数组并有条件地增加一个计数器。我使用索引来比较其他数组的元素:
elements.each_with_index.with_object(0) do |(element, index), diff|
diff += 1 unless other[index] == element
end
即使无条件更改值,我也无法让diff
更改值。
这可以通过inject
:
elements.each_with_index.inject(0) do |diff, (element, index)|
diff += 1 unless other[index] == element
diff
end
但我想知道.each_with_index.with_object(0)
是否是一个有效的构造以及如何使用它?
答案 0 :(得分:6)
请注意,您不能使用数字,true或false等不可变对象 作为备忘录。你会认为以下返回120,但自从 备忘录永远不会改变,但事实并非如此。
(1..5).each_with_object(1){| value,memo |备忘录* =价值}#=> 1
因此each_with_object
不适用于整数等不可变对象。
答案 1 :(得分:2)
你想要计算元素明智差异的数量,对吗?
elements = [1, 2, 3, 4, 5]
other = [1, 2, 0, 4, 5]
# ^
我使用Array#zip
将数组元素和Array#count
结合起来计算不等对:
elements.zip(other).count { |a, b| a != b } #=> 1