Max_by and other methods simply not working

Hello to everyone!

I am quite new to ruby and I’m simply wanted to find the longest number
sequence in an array like this:

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

However, in the output I get only the first value in the array.
I tried to use other methods, just to test how they would work and
turned out that none of them work, even those that I’ve copied from
working examples. What can be wrong?
The whole code is:

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

Thanks for any help!

So basically you would do instead is

some_string.scan(/(\d+)/).flatten.max_by(&:length)
or
some_string.scan(/(\d+)/).join(' ').split.max_by(&:length)
or
some_string.scan(/(\d+)/).map(&:first).max_by(&:length)

Explanation

When you use scan(/(\d+)/) method on a String object, it will just scan for digits, and group them in an array. For example:

'4433234 123 1234 43322 444444'.scan(/(\d+)/)
# => [["4433234"], ["123"], ["1234"], ["43322"], ["444444"]]

So each array in the above return value has size / length / count 1:
‘4433234 123 1234 43322 444444’.scan(/(\d+)/).map &:length
# => [1, 1, 1, 1, 1]

So max_by will not work as intended.