2016-10-28 7 views
0

ハッシュの配列にreduceを呼び出すと、()技法を使用してパラメータ内でキーと値でハッシュを分割できると考えられました。しかし、この場合には、動作するように表示されません。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["source", 2]する"lead"vことが期待。列は配列でありハッシュではないので、これを行うことはできません(k,v)ハッシュのキーと値のペアを取得することはできません。ブロックでそれを解剖するのではなく、k/vペアを渡すために引数リストで使用できる別のテクニックがありますか?

答えて

1

これは、この括弧の背後にある論理は基本的に並列代入であり、コレクションの各アイテムがハッシュであるため、あなたのケースでは機能しません。だから、実質的に何ができるかではなく、配列に各項目を変換する:

columns = columns.flat_map(&:to_a) 

Demonstration

関連する問題