在散列数组上调用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对而不必在块中剖析它?
答案 0 :(得分:1)
之所以发生这种情况,是因为这个括号背后的逻辑基本上是一个并行赋值,在你的情况下它并不起作用,因为集合中的每个项都是一个哈希。所以实际上你可以做的就是将每个项目转换为数组:
columns = columns.flat_map(&:to_a)