Jam*_*aal 4 ruby arrays string
如果我有一个类似下面的字符串,我将如何在每个第3个字符或任何其他指定的字符分割它?
b = "123456789"
Run Code Online (Sandbox Code Playgroud)
结果是这样的:
b = ["123","456","789"]
Run Code Online (Sandbox Code Playgroud)
我尝试过使用这些方法: b.split("").each_slice(3).to_a
但结果如下: [["1", "2", "3"], ["4", "5", "6"], ["7", "8", "9"]]
谢谢您的帮助!
b = "123456789"
b.chars.each_slice(3).map(&:join)
# => ["123", "456", "789"]
Run Code Online (Sandbox Code Playgroud)
我用的是:
b = "123456789"
b.scan(/.{3}/) # => ["123", "456", "789"]
Run Code Online (Sandbox Code Playgroud)
如果OP的样本长度不同,或者嵌入了"\n",则可以进行简单的修改:
b = "123456789"
b.scan(/.{1,3}/) # => ["123", "456", "789"]
b[0..-2].scan(/.{1,3}/) # => ["123", "456", "78"]
"#{ b }\n#{ b }".scan(/.{1,3}/) # => ["123", "456", "789", "123", "456", "789"]
Run Code Online (Sandbox Code Playgroud)
现在,如果在"3"边界上存在嵌入的"\n"NOT,则会断开:
"#{ b[0..-2] }\n#{ b }".scan(/.{1,3}/) # => ["123", "456", "78", "123", "456", "789"]
Run Code Online (Sandbox Code Playgroud)
但这远远超出了OP的简单规范,可以通过首先剥离新行来修复:
"#{ b[0..-2] }\n#{ b }".delete("\n").scan(/.{1,3}/) # => ["123", "456", "781", "234", "567", "89"]
Run Code Online (Sandbox Code Playgroud)
你几乎成功了.
b = "123456789"
b.split("").each_slice(3).map(&:join) # => ["123", "456", "789"]
Run Code Online (Sandbox Code Playgroud)
其他方式:
my_s, my_a = '123456789', []
my_a << my_s.slice!(0..2) until my_s.empty?
p my_a # => ["123", "456", "789"]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1972 次 |
| 最近记录: |