带有索引的Ruby`very_with_object`

时间:2014-02-12 16:36:40

标签: ruby

我希望a.each_with_objectindex进行比此更好的方式:

a = %w[a b c]
a.each.with_index.each_with_object({}) { |arr, hash|  
  v,i = arr
  puts "i is: #{i}, v is #{v}" 
}

i is: 0, v is a
i is: 1, v is b
i is: 2, v is c
=> {}

有没有办法在没有v,i = arr的情况下执行此操作?

3 个答案:

答案 0 :(得分:43)

而不是

|arr, hash|

你可以做到

|(v, i), hash|

答案 1 :(得分:35)

在您的示例中.each.with_index是多余的。我找到了这个解决方案:

['a', 'b', 'c'].each_with_object({}).with_index do |(el, acc), index|
  acc[index] = el
end
# => {0=>"a", 1=>"b", 2=>"c"}

答案 2 :(得分:1)

您可以用

替换最后一行
puts "i is: %d, v is %s" % arr.reverse

但是,正如@sawa建议的那样,消除数组参数的歧义就是要做的事情。我只是提到这个东西要存放一天。