-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”字段定义。我们保证每组至少有两个项目。我们想要返回一个包含每个组的第二项的数组:

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 回答