通过注入有条件总结

时间:2009-10-04 10:51:47

标签: ruby code-injection enumerable

如何获取项目索引:

my_array.inject {|rs,item| rs += item}

我需要总结除第i个元素以外的所有元素。

4 个答案:

答案 0 :(得分:4)

总结一下指数。

(0...a.size).inject(0) { |sum, index| if index != (i - 1) then sum + my_array[i] else sum }

答案 1 :(得分:3)

你必须编写自己的(即使在Ruby 1.9中,因为inject不会返回迭代器)。

module Enumerable
  def inject_with_index(injected)
    each_with_index {|value, index| injected = yield(injected, value, index)}
    injected
  end
end

编辑:如果您切换injecteach_with_index(感谢评论者!),您可以在没有新方法的情况下执行此操作:

["a", "b", "c"].each_with_index.inject("") do |result, (value, index)|
  index != 1 ? result + value : result
end

如果要排除该值,请务必仅返回result。这也适用于第一种方法。

答案 2 :(得分:2)

使用数组的index方法:

>> arr = ['a','b', 'c','a']
=> ["a", "b", "c", "a"]
>> arr.index('a')
=> 0
>> arr.index('b')
=> 1

答案 3 :(得分:2)

您可以先取出您不想要的项目:

my_array.values_at(0...i,(i+1)..-1).inject {|rs,item| rs += item}