-1

この問題は、手動ループと結果配列を使用して簡単に解決できます。これらを追加していきます。しかし、私はもっとルビー風の解決策、おそらく注入または選択を使用するものを探しています。ここに問題があります:

arr_of_hashes = [
  {id: 1, val: "blah1"},
  {id: 1, val: "blah2"},
  {id: 1, val: "blah3"},
  {id: 2, val: "blah4"},
  {id: 2, val: "blah5"},
  {id: 3, val: "blah6"},
  {id: 3, val: "blah7"},
  {id: 3, val: "blah8"},
  {id: 3, val: "blah9"}
]

「グループ」は、ハッシュの「id」フィールドによって定義されます。各グループには少なくとも2つのアイテムがあることが保証されています。各グループの2番目の項目を含む配列を返します。

output_should_be = [
  {id: 1, val: "blah2"},
  {id: 2, val: "blah5"},
  {id: 3, val: "blah7"}
]
4

2 に答える 2

4

「もっとルビー風の解決策を探しています」。私はあなたが機能的であることを意味すると思います:

arr_of_hashes.chunk { |h| h[:id] }.map { |id, hs| hs[1] }
#=> [{:id=>1, :val=>"blah2"}, {:id=>2, :val=>"blah5"}, {:id=>3, :val=>"blah7"}]

要素がidgroup_byで事前注文されていない場合に使用します。

于 2012-11-02T23:03:16.567 に答える
1

これが使用する解決策group_byです:

arr_of_hashes.group_by{|h| h[:id]}.to_a.map{|id,a| a[1]}
于 2012-11-02T23:09:09.263 に答える