【问题标题】:How can I find the longest string in a multi-dimensional array?如何在多维数组中找到最长的字符串?
【发布时间】:2026-02-18 19:50:01
【问题描述】:

我正在尝试从多维数组中获取最长的字符串,但由于某种原因它无法正常工作。

这就是我所拥有的:

a = 
["MAKKGKPRPDHRPPAHNPHYAHDPPPYSQQQPPLQQQNYAQQMNRQHARPRPSPPSEVSDCVKYSLFLYNCIFWVSMHSS"],
["MHHGGGGGNRQHARPRPSPPSEVSDCVKYSLFLYNCIFWVSMHSS"], ["MTYINLGVTRTGDLMIGRHRP"],
["MRIYNRVCFQTAGCYLQNLVTTSIQPARVWTY"], ["MAACGLGRVFSAFKVDEMD"], 
["MPSGFVGKRSGFCQFCCSHI"], ["MTYSTAKEGAYPFRNFN"]]

p a.max_by{|v|v}[0]  # => "MTYSTAKEGAYPFRNFN"

有人可以告诉我我做错了什么吗?

【问题讨论】:

  • 当您创建样本数据(例如阵列中的内容)时,将其剥离到演示问题所需的最低限度。我建议使用[['a'], ['bb'], ['ccc']] 之类的东西就足够了。
  • 子数组是否有可能包含其他元素?或者,它们会总是只有一个元素吗?
  • 对不起,将来会尽量减少任何问题...子数组始终包含一个元素-它们是前瞻扫描的结果...但是我已经将其展平成一个数组...
  • 是的,扁平数组更适合使用。您可能想首先检查并了解为什么要获取数组数组。您也许可以简化代码以不生成这些代码。当我学习 Ruby 并且没有正确使用 map 时,我曾经得到很多。

标签: ruby arrays sorting multidimensional-array


【解决方案1】:
=> a.flatten.max_by(&:size)
=> # "MAKKGKPRPDHRPPAHNPHYAHDPPPYSQQQPPLQQQNYAQQMHHGGGGGNRQHARPRPSPPSEVSDCVKYSLFLYNCIFWVSMHSS"

【讨论】:

    【解决方案2】:
    a = [
        ["MAKKGKPRPDHRPPAHNPHYAHDPPPYSQQQPPLQQQNYAQQMHHGGGGGNRQHARPRPSPPSEVSDCVKYSLFLYNCIFWVSMHSS"],
        ["MHHGGGGGNRQHARPRPSPPSEVSDCVKYSLFLYNCIFWVSMHSS"],
        ["MTYINLGVTRTGDLMIGRHRP"],
        ["MRIYNRVCFQTAGCYLQNLVTTSIQPARVWTY"],
        ["MAACGLGRVFSAFKVDEMD"],
        ["MPSGFVGKRSGFCQFCCSHI"],
        ["MTYSTAKEGAYPFRNFN"]
    ]
    p a.max_by { |v| v[0].size }[0]
    

    输出:

    "MAKKGKPRPDHRPPAHNPHYAHDPPPYSQQQPPLQQQNYAQQMHHGGGGGNRQHARPRPSPPSEVSDCVKYSLFLYNCIFWVSMHSS"
    

    只需指定v,就可以对每个元素(单元素数组)进行比较。它们按字典顺序进行比较。

    【讨论】:

      【解决方案3】:

      这应该可行:

      a.max_by { |v| v.first.size }[0]
      

      【讨论】:

        【解决方案4】:
        => a = [["MAKKGKPRPDHRPPAHNPHYAHDPPPYSQQQPPLQQQNYAQQMHHGGGGGNRQHARPRPSPPSEVSDCVKYSLFLYNCIFWVSMHSS"],
                ["MHHGGGGGNRQHARPRPSPPSEVSDCVKYSLFLYNCIFWVSMHSS"],
                ["MTYINLGVTRTGDLMIGRHRP"],
                ["MRIYNRVCFQTAGCYLQNLVTTSIQPARVWTY"],
                ["MAACGLGRVFSAFKVDEMD"],
                ["MPSGFVGKRSGFCQFCCSHI"],
                ["MTYSTAKEGAYPFRNFN"]
            ]
        
        => a.flatten.sort_by(&:length).last
        
        #=> "MAKKGKPRPDHRPPAHNPHYAHDPPPYSQQQPPLQQQNYAQQMHHGGGGGNRQHARPRPSPPSEVSDCVKYSLFLYNCIFWVSMHSS"
        

        【讨论】: