【问题标题】:Find largest sub array out of ruby multidimensional array从ruby多维数组中找到最大的子数组
【发布时间】:2014-03-11 05:20:05
【问题描述】:

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

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

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

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

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

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

提前致谢。

【问题讨论】:

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


    【解决方案1】:

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

    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 用于链接文档。我可能会选择这个和@dimuch 的答案的混合体(因为问题引用了 second 元素,而不是 last):array.max_by { |a| a[1] }.first #=> 5
    • 谢谢 Arie ..还有一个我忘了提到的情况是我想要所有子元素的第一个元素,它们是最大的,例如。 [[1,20],[2,40],[5,100],[7,15],[9,22],[12,100]] 在这种情况下输出将是 [5,12]
    • @Mayank 如果您发现答案有帮助,请考虑接受。谢谢
    【解决方案2】:

    试试类似的东西

    array.max_by(&:last).first
    

    【讨论】:

      【解决方案3】:

      以下更新的问题。

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

      【讨论】:

        【解决方案4】:
        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]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-03-18
          • 2014-11-16
          • 2018-04-26
          • 2017-06-19
          • 1970-01-01
          • 2021-02-18
          相关资源
          最近更新 更多