这是我的代码。我正在尝试获得一个二维数组,每个数组都有五个连续的整数。此代码不起作用。因此,如果输入为'1234567891',则输出必须为[[12345],[67891]]
def integer_groups(x)
array = x.to_s.split('')
new_array = []
intervals = x / 5
intervals.times { |n| new_array[n] << array.shift(5) }
puts n
end
答案 0 :(得分:3)
执行以下操作:
1234567891.to_s.chars.each_slice(5).to_a
# => [["1", "2", "3", "4", "5"], ["6", "7", "8", "9", "1"]]
1234567891.to_s.chars.each_slice(5).map { |a| a.join.to_i }
# => [12345, 67891]
更新(最短和最快)
num = 1234567891
num.to_s.scan(/\d{1,5}/).map { |n| [n.to_i] }
# => [[12345], [67891]]
scan(/\d{1,5}/)
- 它将扫描5
组中字符串中的数字。如果字符串长度不能被5
整除,那么它也会将最后一个字符扫描为1 <= n < 5
之间的一组长度。这里n
是scan
给出的字符串的大小。 /\d{1,5}/
也可以写为/.{1,5}/
,因为源字符串只包含数字,不包含其他类型的字符。 .
表示除\n
以外的任何字符。