如何将长整数分成几对数字

时间:2019-05-28 14:34:17

标签: ruby

我有一个长数字12345678的字符串,并想将其转换为这样的数组:

["12", "34", "56", "78"].

我尝试过array.split(//).map { |e| e.to_i },但确实可以

["1", "2", "3", "4", "5", "6", "7", "8"]

3 个答案:

答案 0 :(得分:2)

我认为不需要使用正则表达式,我会这样做:

12345678.to_s.chars.each_slice(2).map(&:join)
#=> ["12","34","56","78"]

答案 1 :(得分:2)

最简单的方法是将String#scan与正则表达式/../配合使用,它可以匹配任意一对字符:

n = 12345678

arr = n.to_s.scan(/../)
# => ["12", "34", "56", "78"]

如果您需要处理奇数位数并保留最后一位,请改用/..?/

n = 123456789

arr = n.to_s.scan(/..?/)
# => ["12", "34", "56", "78", "9"]

另一种方法是使用Range#step方法在map范围内0...n.to_s.size

n = 123456789
str = n.to_s

arr = (0...str.size).step(2).map {|i| str[i, 2] }
# => ["12", "34", "56", "78", "9"]

您可以在repl.it上看到所有三种方法:https://repl.it/@jrunning/BlissfulAcclaimedStrategy

答案 2 :(得分:1)

您可以使用

p = 123456789.to_s (0..p.length).each_cons(2).map {|i, j| "#{p[i]}#{p[j]}" if i%2 == 0}.compact