我有一个散列,其值是数组,如下所示:
hash = {
"key1" => [object11, object12, object13],
"key2" => [object21, object22, object23]
}
数组中的所有对象都属于同一个类,其属性为source
。如果object11
和object12
具有相似的source
值,我想删除其中一个,object11
或object12
。我想检查数组中的对象,从而删除重复的对象。副本是指具有现有属性值的那些。
我试着这样做:
hash.values.map(&:source).uniq
但它不起作用。也许我错过了什么。
答案 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) }