で作業するとき、私はあなたが変数の長さのハッシュの配列を持っていて、個別に各1で作業したい場合flat_mapは偉大だと思う:flat_map異なる要素
data = [
{'apple' => 'fruit'},
{'carrot' => 'vegetable'},
{'orange' => 'fruit', 'pear' => 'fruit'},
{'lettuce' => 'vegetable'}
]
data.flat_map(&:to_a).reduce([]) {|acc, (k,v)| acc << Hash[k,v] }
=> [{"apple"=>"fruit"}, {"carrot"=>"vegetable"}, {"orange"=>"fruit"}, {"pear"=>"fruit"}, {"lettuce"=>"vegetable"}]
しかし、私は私は思いませんflat_mapを完全に理解する。
docsによると:
は、列挙型のすべての要素に対して一度ブロック を実行しているの連結業績を持つ新しい配列を返します。
しかし、この例を見て:
[[1], {a: "a"}, {b: "b"}].flat_map(&:to_a)
=> [1, [:a, "a"], [:b, "b"]]
最初の項目は、内側アレイから剥離され、他の項目は、アレイに変換されます。これをどうやって知っていますか?
私はこのようなto_aを呼び出す:
[1].to_a
=> [1]
[1].to_a.flatten
=> [1]
あなたは結果がflat_mapがやったこととは異なっている参照してください。最初の例で配列の項目を削除するためにflat_mapは何をしていますか?