4

以下のような文字列がある場合、3 文字ごとまたはその他の指定された文字でどのように分割しますか?

b = "123456789"

結果は次のようになります。

b = ["123","456","789"]

私はこれらの方法を使用してみました:b.split("").each_slice(3).to_a

しかし、結果は次のようになります。[["1", "2", "3"], ["4", "5", "6"], ["7", "8", "9"]]

ご協力ありがとうございました!

4

6 に答える 6

6

私は使用します:

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"]
于 2013-10-16T17:56:06.057 に答える
5

別の方法:

my_s, my_a = '123456789', []
my_a << my_s.slice!(0..2) until my_s.empty?
p my_a # => ["123", "456", "789"]
于 2013-10-16T18:18:33.770 に答える
5

あなたはほとんどそれを作りました。

b = "123456789"
b.split("").each_slice(3).map(&:join) # => ["123", "456", "789"]
于 2013-10-16T17:54:49.043 に答える
5
b = "123456789"
b.chars.each_slice(3).map(&:join)
# => ["123", "456", "789"]
于 2013-10-16T17:54:54.933 に答える