2017-04-24 50 views
0

我想找到一個這樣的數組中最長的數字序列:如何使用max_by

string = input.scan(/(\d+)/) 
string.max_by(&:length) 

然而,在輸出我只得到了數組中的第一個值。

整個代碼:

puts "Enter a string with letters and numbers" 
input = gets 
string = input.scan(/(\d+)/) 
puts string.max_by(&:length) 

我試圖用其他的方法,只是爲了測試他們將如何工作,事實證明,他們沒有工作,即使是那些我從工作的例子複製。什麼可能是錯誤的?

回答

6

你的問題是與String#scan,不與max_by

"12 3456 789".scan(/(\d+)/) 
# [["12"], ["3456"], ["789"]] 

它返回一個數組的數組,因爲您在掃描中使用匹配的組。對於每一場比賽,它都會返回一個包含所有組的數組。每場比賽只有1組,所以所有這些數組都只有1個元素。

max_by正確地返回第一個數組,因爲它至少與所有其他元素一樣多。您沒有注意到該錯誤,因爲數組和字符串都響應:length

你想:

"12 3456 789".scan(/\d+/) 
# ["12", "3456", "789"] 

隨着max_by

"12 3456 789".scan(/\d+/).max_by(&:length) 
# "3456"