我有一个长数字12345678的字符串,并想将其转换为这样的数组:
["12", "34", "56", "78"].
我尝试过array.split(//).map { |e| e.to_i }
,但确实可以
["1", "2", "3", "4", "5", "6", "7", "8"]
答案 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