[英]How to get the minimum value of an array, based on comparing more than one block using min_by?
[英]get maximum as an array in case of more than one with same maximum value
Ruby有Enumerable#max
和Enumerable#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.