簡體   English   中英

如果多個具有相同的最大值,則獲得最大值作為數組

[英]get maximum as an array in case of more than one with same maximum value

Ruby有Enumerable#maxEnumerable#max_by ,我用以下方式使用max_by

array = [
           {:a => 1, :b => 2, :c => 3}, 
           {:a => 3, :b => 2, :c => 4}, 
           {:a => 3, :b => 1, :c => 4}
        ]
max_item = array.max_by { |item| item[:b] }
=> {:b=>2, :c=>3, :a=>1}

因此,它將返回單個最大值(我認為是第一個),即使有2個項具有相同的最大值。 我想實現一個函數,在這種情況下給出兩個項目。 還有其他一些max_by變體還是我需要從頭開始寫這個?

array = [
           {:a => 1, :b => 2, :c => 3}, 
           {:a => 3, :b => 2, :c => 4}, 
           {:a => 3, :b => 1, :c => 4}
        ]

array.group_by{|el| el[:b]}.max.last 
#=>[{:a=>1, :b=>2, :c=>3}, {:a=>3, :b=>2, :c=>4}]

group_by工作有點太難了,但它確實提供了。

據我所知,沒有這樣的方法。 但是,下面應該這樣做(我把它添加到Array只是因為我在irb中工作 - 你可以在最有意義的地方進行猴子修補)

class Array
  def maxes_by &block
    max_condition = block.call(max_by(&block))
    select {|it| block.call(it) == max_condition}
  end
end

array = [
           {:a => 1, :b => 2, :c => 3}, 
           {:a => 3, :b => 2, :c => 4}, 
           {:a => 3, :b => 1, :c => 4}
        ]
array.maxes_by{|it| it[:b]}
# => [{:a=>1, :b=>2, :c=>3}, {:a=>3, :b=>2, :c=>4}]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM