如何获取具有最大属性值的数组的唯一元素

3

我有一个对象数组:

[{id:1, price:10},{id:2, price:9},{id:3, price:8},{id:1, price:7}]

现在,如何获得具有唯一ID的数组,但在选择具有相同ID的两个对象时,获取最大值({id:1, price:10})?
预期结果:
[{:id=>1, :price=>10}, {:id=>2, :price=>9}, {:id=>3, :price=>8}]
2个回答

5
也许像这样的内容吗?
a = [
    {id:1, price:10},
    {id:2, price:9},
    {id:3, price:8},
    {id:1, price:7}
]

b = a.group_by{|h| h[:id]}. 
      map{|_, v| v.max_by {|el| el[:price]}}

b # => [{:id=>1, :price=>10}, {:id=>2, :price=>9}, {:id=>3, :price=>8}]

3

我建议使用Enumerable#sort_byArray#uniq来完成。

a = [{id:1, price:10},{id:2, price:9},{id:3, price:8},{id:1, price:7}]
a.sort_by { |h| -h[:price] }.uniq { |h| h[:id] }
# => [{:id=>1, :price=>10}, {:id=>2, :price=>9}, {:id=>3, :price=>8}]

1
@Abdo 是的!!首先对其进行排序..最大条目将按价格排列,然后通过id收集唯一元素.. :) :) - Arup Rakshit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接