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

时间:2023-01-27 21:34:11

I am trying to get the longest string from an multidimensional array, however it is not working for some reason.

我试图从多维数组中获取最长的字符串,但是由于某些原因它不能工作。

This is what I have:

这就是我所拥有的:

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

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

Could someone please let me know what I am doing wrong?

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

4 个解决方案

#1


6  

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

#2


5  

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

output:

输出:

"MAKKGKPRPDHRPPAHNPHYAHDPPPYSQQQPPLQQQNYAQQMHHGGGGGNRQHARPRPSPPSEVSDCVKYSLFLYNCIFWVSMHSS"

Simply specifying v, comparisons are done with each element (single-element array). They are compared lexicographically.

只需指定v,就可以对每个元素(单元素数组)进行比较。他们是按相比。

#3


2  

This should work:

这应该工作:

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

#4


2  

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

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

#=> "MAKKGKPRPDHRPPAHNPHYAHDPPPYSQQQPPLQQQNYAQQMHHGGGGGNRQHARPRPSPPSEVSDCVKYSLFLYNCIFWVSMHSS"

#1


6  

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

#2


5  

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

output:

输出:

"MAKKGKPRPDHRPPAHNPHYAHDPPPYSQQQPPLQQQNYAQQMHHGGGGGNRQHARPRPSPPSEVSDCVKYSLFLYNCIFWVSMHSS"

Simply specifying v, comparisons are done with each element (single-element array). They are compared lexicographically.

只需指定v,就可以对每个元素(单元素数组)进行比较。他们是按相比。

#3


2  

This should work:

这应该工作:

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

#4


2  

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

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

#=> "MAKKGKPRPDHRPPAHNPHYAHDPPPYSQQQPPLQQQNYAQQMHHGGGGGNRQHARPRPSPPSEVSDCVKYSLFLYNCIFWVSMHSS"