从ruby多维数组中找到最大的子数组



我想找出ruby多维数组中最大的子数组。我有一个多维数组,如下所示:

array = [[1,20],[2,40],[5,100],[7,15],[9,22]]

我想要子数组的第一个元素,第二个元素是最大的,就像上面的例子一样,我想要5作为输出,因为子数组[5,100]的第二个元素是最大的,即100。输出将是5

如果不止一个元素是最大值,那么我希望所有元素都是最大值

交货:数组=[[1,20],[2,40],[5100],[7、15],[9日22],[12100]]

在这种情况下输出将是[5,12]

您可以使用Enumerable#max_by方法来选择max元素,然后将该元素投影到结果值

array.max_by{|a| a[1]}[0]
更新:

如果你想要所有的元素都有最大值,你可以先从数组中获得最大值,然后用这个值过滤数组。

max_value = array.max_by{|a| a[1]}[1]
results = array.select{|a| a[1] == max_value}.map(&:first)

你可以使用一行表达式,但我认为这样可读性较差

array.group_by{|a| a[1]}.max_by{|k,v| k}[1].map(&:first)

试试

array.max_by(&:last).first

以下是更新后的问题

可以使用Arie的答案来计算largest:

largest = array.max_by { |a| a[1] }[1] #=> 100

然后将Enumerable#mapArray#compact组合得到:

array.map { |a| a.first if a[1] == largest}.compact #=> [5, 12]

更好…

使用Hash,正如我在回答你之前的问题时提到的…

hash
#=> {1=>20, 2=>40, 5=>100, 7=>15, 9=>22, 12=>100}

最大价值:

hash.values.max
#=> 100

最大的键值对:

hash.select { |k, v| v == hash.values.max }
#=> {5=>100, 12=>100}

值最大的键:

hash.select { |k, v| v == hash.values.max }.keys
#=> [5, 12]
a =  [[1,20],[2,40],[5,100],[7,15],[9,22],[12,100]]
max = a.map(&:last).max
a.select{|x|x.last==max}.map(&:first) #=> [5, 12]

相关内容

  • 没有找到相关文章

最新更新