今天我花了一些时间来解决均衡指数问题(描述here)
在编写了我自己的解决方案(大量表现不佳)之后,我决定找到一个完美的分数。我找到了这个(which Codility scores as 100/100):
def equi(a)
left, right = 0, a.inject(0, &:+)
indices = []
a.each_with_index do |val, i|
right -= val
indices << i if right == left
left += val
end
indices
end
我不明白的是在方法的顶部并行分配和使用注入。有人能够描述这是做什么的吗?
非常感谢! 斯图
答案 0 :(得分:2)
它将left
的0和a
的元素的总和分配给right
。 0参数存在,因为否则空数组将返回nil
。用于求和的简写是Symbol#to_proc并且是不必要的,因为inject
直接将符号作为其参数 - inject(0, :+)
。
答案 1 :(得分:0)
这只是数组的总和:
>> ar = (1..10).to_a
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>> ar.inject(0, &:+)
=> 55
# or a shorter version
>> ar.inject(&:+)
=> 55
您应该真正阅读Enumerable#inject
方法上的doc。它解释了一切。