Uniq哈希值

时间:2015-08-03 19:01:31

标签: arrays ruby hash

我有一个散列,其值是数组,如下所示:

hash = {
  "key1" => [object11, object12, object13],
  "key2" => [object21, object22, object23]
}

数组中的所有对象都属于同一个类,其属性为source。如果object11object12具有相似的source值,我想删除其中一个,object11object12。我想检查数组中的对象,从而删除重复的对象。副本是指具有现有属性值的那些。

我试着这样做:

hash.values.map(&:source).uniq

但它不起作用。也许我错过了什么。

1 个答案:

答案 0 :(得分:1)

这很可能会缩短,但这是我想到的漫长道路:

hash.each do |key, values_array|
  hash[key] = values_array.uniq { |v| v.source }
end

这样做是迭代哈希中的每个键以及随其存储的数组。然后它根据数组中每个对象的source属性强制唯一性,并将其存储回该关键位置的哈希值。

编辑: 正如@engineersmnky在评论中所提到的,它可以缩写为:

hash.each {|_,v| v.uniq!(&:source) }