Ruby哈希数组;仅保留包含某个键的第一个元素=>;值对

Ruby哈希数组;仅保留包含某个键的第一个元素=>;值对,ruby,arrays,dictionary,Ruby,Arrays,Dictionary,假设我在Ruby中有以下哈希数组: a = [{:id => 1, :species =>"Homo sapiens"}, {:id => 2, :species =>"Canis lupus"}, {:id => 3, :species =>"Bos taurus"}, {:id => 4, :species =>"Homo sapiens"}, {:id => 5, :species =>"P

假设我在Ruby中有以下哈希数组:

a = [{:id => 1, :species =>"Homo sapiens"},
     {:id => 2, :species =>"Canis lupus"},
     {:id => 3, :species =>"Bos taurus"},
     {:id => 4, :species =>"Homo sapiens"},
     {:id => 5, :species =>"Pan troglodytes"},
     {:id => 6, :species =>"Bos taurus"}]
仅保留包含每个
:species
键的第一个元素(即丢弃重复物种名称的任何元素)的最惯用和简洁的方法是什么?
对于上面的示例,所需的结果如下所示:

b = [{:id => 1, :species =>"Homo sapiens"},
     {:id => 2, :species =>"Canis lupus"},
     {:id => 3, :species =>"Bos taurus"},
     {:id => 5, :species =>"Pan troglodytes"}]
我可以通过首先将所有物种读入第二个数组,然后使用
uniq删除重复的物种来实现这一点,然后对包含第二个数组中表示的每个物种的第一个元素遍历原始数组,但这看起来非常不像Ruby,而且看起来相当难看。

您只需要使用:-


太好了-这太完美了。既简洁又易读。谢谢完美,perfetto,冻糕,perfekt,perfecto,完ぺき, 完美, 완전한 !
a = [{:id => 1, :species =>"Homo sapiens"},
     {:id => 2, :species =>"Canis lupus"},
     {:id => 3, :species =>"Bos taurus"},
     {:id => 4, :species =>"Homo sapiens"},
     {:id => 5, :species =>"Pan troglodytes"},
     {:id => 6, :species =>"Bos taurus"}]

a.uniq { |h| h[:species] }
# => [{:id=>1, :species=>"Homo sapiens"},
#     {:id=>2, :species=>"Canis lupus"},
#     {:id=>3, :species=>"Bos taurus"},
#     {:id=>5, :species=>"Pan troglodytes"}]