以下のような文字列がある場合、3 文字ごとまたはその他の指定された文字でどのように分割しますか?
b = "123456789"
結果は次のようになります。
b = ["123","456","789"]
私はこれらの方法を使用してみました:b.split("").each_slice(3).to_a
しかし、結果は次のようになります。[["1", "2", "3"], ["4", "5", "6"], ["7", "8", "9"]]
ご協力ありがとうございました!
私は使用します:
b = "123456789"
b.scan(/.{3}/) # => ["123", "456", "789"]
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"]
ここで、偶数の "3" 境界にない "\n" が埋め込まれている場合、次のように壊れます。
"#{ b[0..-2] }\n#{ b }".scan(/.{1,3}/) # => ["123", "456", "78", "123", "456", "789"]
しかし、それはOPの単純な仕様からかなり離れており、最初に改行を削除することで修正できます:
"#{ b[0..-2] }\n#{ b }".delete("\n").scan(/.{1,3}/) # => ["123", "456", "781", "234", "567", "89"]
別の方法:
my_s, my_a = '123456789', []
my_a << my_s.slice!(0..2) until my_s.empty?
p my_a # => ["123", "456", "789"]
あなたはほとんどそれを作りました。
b = "123456789"
b.split("").each_slice(3).map(&:join) # => ["123", "456", "789"]
b = "123456789"
b.chars.each_slice(3).map(&:join)
# => ["123", "456", "789"]