2014-02-20 58 views
2

我想從多維數組中獲取最長的字符串,但是由於某種原因它不工作。如何找到多維數組中最長的字符串?

這是我有:

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

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

可能有人請讓我知道我做錯了嗎?

+6

當您創建示例數據,比如什麼是你的陣中,剝離下來到必要說明問題的最低限度。我建議使用'[['a'],['bb'],['ccc']]'就足夠了。 –

+1

子陣列是否有附加元素的機會?或者,他們會一直*有一個單一的元素? –

+0

對不起,將在未來將任何問題都剝離到最低限度......子陣列總是包含一個元素 - 它們是前瞻掃描的結果......但是我已將其平鋪爲單個陣列... –

回答

6
​​
2

這應該工作:

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

輸出:

"MAKKGKPRPDHRPPAHNPHYAHDPPPYSQQQPPLQQQNYAQQMHHGGGGGNRQHARPRPSPPSEVSDCVKYSLFLYNCIFWVSMHSS" 

簡單地指定v,比較與每個元件(單元素數組)來完成。它們按字典順序進行比較。

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

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

#=> "MAKKGKPRPDHRPPAHNPHYAHDPPPYSQQQPPLQQQNYAQQMHHGGGGGNRQHARPRPSPPSEVSDCVKYSLFLYNCIFWVSMHSS" 
相關問題