如何在多维数组中找到最长的字符串?

3

我正在尝试从多维数组中获取最长的字符串,但是由于某些原因它没有起作用。

这是我的代码:

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

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

请问有人能告诉我我做错了什么吗?


6
当您创建示例数据(例如数组中的数据)时,请将其简化为最小必要量以演示问题。我建议使用像[['a'], ['bb'], ['ccc']]这样的内容就足够了。 - the Tin Man
1
子数组是否可能有额外的元素?或者,它们是否始终只有一个元素? - the Tin Man
抱歉,以后会将所有问题简化到最基本的要素...子数组始终只包含一个元素-它们是前瞻扫描的结果...但我已经将其压缩成单个数组... - Ismail Moghul
是的,扁平化数组更适合处理。你可能想检查一下,为什么首先会得到数组的数组。你可能能够简化你的代码以避免产生这些数组。当我学习 Ruby 并且没有正确使用 map 时,我经常会遇到这些问题。 - the Tin Man
4个回答

7
=> a.flatten.max_by(&:size)
=> # "MAKKGKPRPDHRPPAHNPHYAHDPPPYSQQQPPLQQQNYAQQMHHGGGGGNRQHARPRPSPPSEVSDCVKYSLFLYNCIFWVSMHSS"

5
a = [
    ["MAKKGKPRPDHRPPAHNPHYAHDPPPYSQQQPPLQQQNYAQQMHHGGGGGNRQHARPRPSPPSEVSDCVKYSLFLYNCIFWVSMHSS"],
    ["MHHGGGGGNRQHARPRPSPPSEVSDCVKYSLFLYNCIFWVSMHSS"],
    ["MTYINLGVTRTGDLMIGRHRP"],
    ["MRIYNRVCFQTAGCYLQNLVTTSIQPARVWTY"],
    ["MAACGLGRVFSAFKVDEMD"],
    ["MPSGFVGKRSGFCQFCCSHI"],
    ["MTYSTAKEGAYPFRNFN"]
]
p a.max_by { |v| v[0].size }[0]

输出:

"MAKKGKPRPDHRPPAHNPHYAHDPPPYSQQQPPLQQQNYAQQMHHGGGGGNRQHARPRPSPPSEVSDCVKYSLFLYNCIFWVSMHSS"

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


2
这应该可以工作:
a.max_by { |v| v.first.size }[0]

2
=> a = [["MAKKGKPRPDHRPPAHNPHYAHDPPPYSQQQPPLQQQNYAQQMHHGGGGGNRQHARPRPSPPSEVSDCVKYSLFLYNCIFWVSMHSS"],
        ["MHHGGGGGNRQHARPRPSPPSEVSDCVKYSLFLYNCIFWVSMHSS"],
        ["MTYINLGVTRTGDLMIGRHRP"],
        ["MRIYNRVCFQTAGCYLQNLVTTSIQPARVWTY"],
        ["MAACGLGRVFSAFKVDEMD"],
        ["MPSGFVGKRSGFCQFCCSHI"],
        ["MTYSTAKEGAYPFRNFN"]
    ]

=> a.flatten.sort_by(&:length).last

#=> "MAKKGKPRPDHRPPAHNPHYAHDPPPYSQQQPPLQQQNYAQQMHHGGGGGNRQHARPRPSPPSEVSDCVKYSLFLYNCIFWVSMHSS"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接