2016-10-28 2 views
0

При вызове reduce на массив хэшей я думал, что могу разделить хэш по ключу и значению внутри параметров с помощью метода(). Но в данном случае, как представляется, не работает:Разбиение хэш-переменной с уменьшением

columns = [ 
    {"lead"=>["source", 2]}, 
    {"parent"=>["name", 4]} 
] 

columns.reduce({}) do |acc, (k,v)| 
    puts "k #{k} v #{v}" 
end 

# k {"lead"=>["source", 2]} v 
# k {"parent"=>["name", 4]} v 
# => nil 

Я ожидал k быть "lead" и v быть ["source", 2]. Поскольку столбцы - это массив, а не хеш, я не могу сделать это (k,v), чтобы получить пару хэшей ключ/значение. Есть ли другой способ, который я могу использовать в списке аргументов, чтобы передать пару k/v вместо того, чтобы анализировать его в блоке?

ответ

1

Это происходит потому, что логика, лежащая в основе этой круглой скобки, является в основном параллельным назначением, которое не работает в вашем случае, потому что каждый элемент в коллекции является хэшем. Так что практически то, что вы можете сделать, это преобразовать каждый элемент в массиве вместо:

columns = columns.flat_map(&:to_a) 

Demonstration

Смежные вопросы