从ruby中的数组中删除重复项

Jak*_*Jak 5 ruby arrays ruby-on-rails hashmap

我想输出一个散列数组,其中name所有散列都是唯一的.我将如何使用ruby进行此操作?

这是我的意见:

input = [{:name => "Kutty", :score => 2, :some_key => 'value', ...},
         {:name => "Kutty", :score => 4, :some_key => 'value', ...},
         {:name => "Baba", :score => 5, :some_key => 'value', ...}]
Run Code Online (Sandbox Code Playgroud)

我希望输出看起来像这样:

  output = [{:name => "Kutty", :score => 4, :some_key => 'value', ...},
            {:name => "Baba", :score => 5, :some_key => 'value', ...}]
Run Code Online (Sandbox Code Playgroud)

Joa*_*son 15

要根据:name删除重复项,只需尝试;

output = input.uniq { |x| x[:name] }
Run Code Online (Sandbox Code Playgroud)

在这里演示.

编辑:由于您在评论中添加了排序要求,如果您正在使用Rails,这里是如何选择每个名称得分最高的条目,我看到您已经获得了上面"标准"Ruby的答案;

output = input.group_by { |x| x[:name] }
              .map {|x,y|y.max_by {|x|x[:score]}}
Run Code Online (Sandbox Code Playgroud)

可能会有一点解释; 第一行groups按名称输入条目,以便每个名称都有自己的条目数组.第二行遍历组,按名称命名,maps每个名称组到达分数最高的条目.

在这里演示.