Подтвердить что ты не робот

Ruby `each_with_object` с индексом

Я хотел бы сделать a.each_with_object с index лучшим способом, чем это:

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?

4b9b3361

Ответ 1

Вместо

|arr, hash|

вы можете сделать

|(v, i), hash|

Ответ 2

В вашем примере .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"}

Ответ 3

Вы можете заменить свою последнюю строку на

puts "i is: %d, v is %s" % arr.reverse

но, как предположил @sawa, устранение неоднозначности аргумента массива - вот что нужно сделать. Я просто упоминаю об этом как о чем-то, что нужно хранить в течение другого дня.