Ruby均衡指数 - 注入的奇数用法

时间:2012-06-23 11:17:29

标签: ruby inject parallel-assignment

今天我花了一些时间来解决均衡指数问题(描述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

我不明白的是在方法的顶部并行分配和使用注入。有人能够描述这是做什么的吗?

非常感谢! 斯图

2 个答案:

答案 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。它解释了一切。