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

时间:2014-03-11 05:20:06

标签: ruby-on-rails ruby multidimensional-array

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

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

我想要第二个元素最大的子数组的第一个元素,如上例所示,我希望5作为输出,因为子数组[5,100]的第二个元素是最大的100 1}}。输出为5

如果超过一个元素是最大的,那么我想要所有这些。

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

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

提前致谢。

4 个答案:

答案 0 :(得分:9)

您可以使用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)

答案 1 :(得分:4)

尝试类似

的内容
array.max_by(&:last).first

答案 2 :(得分:2)

关注更新的问题。

可以使用Arie's answer来计算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中提到的my answeryour earlier question ...

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]

答案 3 :(得分:2)

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]