使用reduce拆分哈希变量

时间:2016-10-28 23:53:12

标签: arrays ruby hash

在散列数组上调用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 个答案:

答案 0 :(得分:1)

之所以发生这种情况,是因为这个括号背后的逻辑基本上是一个并行赋值,在你的情况下它并不起作用,因为集合中的每个项都是一个哈希。所以实际上你可以做的就是将每个项目转换为数组:

columns = columns.flat_map(&:to_a)

Demonstration