首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找ruby多维数组中最大的子数组

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

Stack Overflow用户
提问于 2014-03-11 13:20:06
回答 4查看 2K关注 0票数 6

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

代码语言:javascript
复制
array = [[1,20],[2,40],[5,100],[7,15],[9,22]]

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

如果一个以上的元素超过了我想要的所有元素的最大值。

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

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

提前谢谢。

EN

回答 4

Stack Overflow用户

发布于 2014-03-11 13:28:58

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

代码语言:javascript
复制
array.max_by{|a| a[1]}[0]

更新:

如果您想要具有最大值的所有元素,您可以首先从数组中获取最大值,然后使用该值过滤数组。

代码语言:javascript
复制
max_value = array.max_by{|a| a[1]}[1]
results = array.select{|a| a[1] == max_value}.map(&:first)

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

代码语言:javascript
复制
array.group_by{|a| a[1]}.max_by{|k,v| k}[1].map(&:first)
票数 9
EN

Stack Overflow用户

发布于 2014-03-11 13:29:42

试试像这样的东西

代码语言:javascript
复制
array.max_by(&:last).first
票数 4
EN

Stack Overflow用户

发布于 2014-03-11 13:53:47

以下是更新后的问题。

您可以使用Arie's answer来计算largest

代码语言:javascript
复制
largest = array.max_by { |a| a[1] }[1] #=> 100

然后将Enumerable#map和Array#compact结合起来,得到:

代码语言:javascript
复制
array.map { |a| a.first if a[1] == largest}.compact #=> [5, 12]

更好的是...

使用Hash,就像my answer to your earlier question中提到的那样...

代码语言:javascript
复制
hash
#=> {1=>20, 2=>40, 5=>100, 7=>15, 9=>22, 12=>100}

最大值:

代码语言:javascript
复制
hash.values.max
#=> 100

值最大的键值对:

代码语言:javascript
复制
hash.select { |k, v| v == hash.values.max }
#=> {5=>100, 12=>100}

值最大的键:

代码语言:javascript
复制
hash.select { |k, v| v == hash.values.max }.keys
#=> [5, 12]
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22317059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档