如何实现 Ruby max_by 返回所有具有最大值的元素?

Kon*_*tin 2 ruby arrays sorting monkeypatching maxima

Ruby max_by 方法查找数组中的最大元素。有时最大元素具有多重性,在这种情况下 max_by 只选择其中之一,看起来是任意的。当我需要所有这些时,我当前使用这种方法来查找数组数组中的最大值:

sorted=ary.sort_by{|a,b| b}.reverse
max_score=sorted.first[1]
t=sorted.take_while{|z| z[1]==max_score}
Run Code Online (Sandbox Code Playgroud)

但是我如何使用“maxes_by”方法对 Array 类进行猴子修补,该方法接受一个块,类似于 max_by,并返回最大值的数组?

spi*_*ann 6

无需编写返回预期输出的新的优化方法,您可以组合max_byselect

maximum = array.max_by { |element| element[1] }
t = array.select { |element| element[1] == maximum[1] }
Run Code Online (Sandbox Code Playgroud)

另一种选择可能是按相关值(使用group_by)对所有元素进行分组,然后仅选择具有最大值的列表。

lists = array.group_by { |element| element[1] }
lists[lists.keys.maximum]
Run Code Online (Sandbox Code Playgroud)