Я предположил, что размер группы указан, и метод должен возвращать nil
, если длина строки не делится равномерно на размер группы.
def split_in_groups(str, group_size)
n, rem = str.size.divmod(group_size)
str.scan(/.{#{n}}/) if rem.zero?
end
split_in_groups("a9547e", 2)
#=> ["a95", "47e"]
split_in_groups("a9547e", 3)
#=> ["a9", "54", "7e"]
split_in_groups("a9547e", 1)
#=> ["a9547e"]
split_in_groups("a9547e", 5)
#=> nil
Если, например,
str = "a9547e"
group_size = 2
тогда
n, rem = str.size.divmod(group_size)
#=> [3, 0]
n #=> 3 (same as str.size/group_size)
rem
#=> 0 (remainder)
str.scan(/.{#{n}}/) if rem.zero?
#=> str.scan(/.{3}/) if true
#=> str.scan(/.../)
#=> ["a95", "47e"]
См. Integer # divmod (очень полезный, но недостаточно используемый метод) и String # scan .