我有一系列像这样的哈希:
[
{ :color => 'red', :animal => 'dog' },
{ :color => 'blue', :animal => 'cat' },
{ :color => 'yellow', :animal => 'frog' },
{ :color => 'red', :animal => 'cat' },
{ :color => 'red', :animal => 'mouse' }
]
我想要做的是根据其中一个键删除除一个重复项之外的所有重复项。
因此,在这种情况下,我想删除color
为red
的所有项目。无论哪一个。
最终输出将是这样的:
[
{ :color => 'blue', :animal => 'cat' },
{ :color => 'yellow', :animal => 'frog' },
{ :color => 'red', :animal => 'mouse' }
]
同样,在删除重复项时,要保留的副本无关紧要。
答案 0 :(得分:2)
.group_by { |x| x[:color] }.values.map(&:first)
.inject({}) { |xs, x| xs[x[:color]] = x; xs }.values
答案 1 :(得分:2)
实现这一目标的另一种方法是
.uniq { |h| h[:color] }
=> [{:color =>“red”,:animal =>“dog”},{:color =>“blue”, :animal =>“cat”},{:color =>“yellow”,:animal =>“frog”}]
正如@Victor所说,这是针对ruby 1.9.2 +