0

我今天花了一些时间来解决均衡指数问题(在此处描述)

在编写了我自己的解决方案(它在大数字时表现不佳)后,我决定找到一个完美的分数。我发现了这个(其中 Codility 得分为 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

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

非常感谢!斯图

4

2 回答 2

2

它将 0lefta的元素之和分配给right。0 参数在那里,因为否则会返回一个空数组nil。用于求和的简写是Symbol#to_proc并且是不必要的,因为inject直接将符号作为其参数 - inject(0, :+)

于 2012-06-23T11:27:23.757 回答
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它解释了一切。

于 2012-06-23T11:25:12.067 回答