[解決済み] Rubyで文字列を任意の長さのチャンクに分割する最良の方法は何ですか?
2023-01-18 22:06:24
質問
私はRubyで文字列を与えられた長さの部分文字列に分割するエレガントで効率的な方法を探しています。
今のところ、私が思いついた最高のものはこれです。
def chunk(string, size)
(0..(string.length-1)/size).map{|i|string[i*size,size]}
end
>> chunk("abcdef",3)
=> ["abc", "def"]
>> chunk("abcde",3)
=> ["abc", "de"]
>> chunk("abc",3)
=> ["abc"]
>> chunk("ab",3)
=> ["ab"]
>> chunk("",3)
=> []
あなたは
chunk("", n)
を返すように
[""]
の代わりに
[]
. もしそうなら、メソッドの最初の行としてこれを追加するだけです。
return [""] if string.empty?
何か良い解決策はないでしょうか?
編集
このエレガントで効率的な解決策を提供してくれたJeremy Rutenに感謝します。[編集: 効率的ではありません!]
def chunk(string, size)
string.scan(/.{1,#{size}}/)
end
編集
string.scanは512kを1kのチャンクに10000回分割するのに約60秒かかりますが、オリジナルのスライスベースのソリューションは2.4秒しかかかりせんでした。
どのように解決するのですか?
使用方法
String#scan
:
>> 'abcdefghijklmnopqrstuvwxyz'.scan(/.{4}/)
=> ["abcd", "efgh", "ijkl", "mnop", "qrst", "uvwx"]
>> 'abcdefghijklmnopqrstuvwxyz'.scan(/.{1,4}/)
=> ["abcd", "efgh", "ijkl", "mnop", "qrst", "uvwx", "yz"]
>> 'abcdefghijklmnopqrstuvwxyz'.scan(/.{1,3}/)
=> ["abc", "def", "ghi", "jkl", "mno", "pqr", "stu", "vwx", "yz"]
関連
-
[解決済み] 文字列リテラルの前にある'b'文字は何を意味するのでしょうか?
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] Python 3で文字列をバイトに変換する最良の方法?
-
[解決済み] 文字列の長さを取得する
-
[解決済み] Rust の `String` と `str` の違いは何ですか?
-
[解決済み] JavaScriptで数値を文字列に変換するのに最適な方法は何ですか?
-
[解決済み] Javaで文字列の文字を反復処理する最も簡単/最も良い/最も正しい方法は何ですか?
-
[解決済み】文字列から句読点を除去する最適な方法
-
[解決済み】Goで空の文字列をテストする最良の方法は何ですか?
-
[解決済み] 文字列を DateTime に変換する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] レスキューVSシドキック?[クローズド]
-
[解決済み] Rubyの文字列の中から"˶‾‾‾˵"を削除するにはどうしたらいいですか?
-
[解決済み] rvm use 2.0.0 --default を実行すると、"Warning! PATH is not properly set up" と表示される。
-
[解決済み] Rubyでbeginとendのブロックを使わずにrescueを使うには?
-
[解決済み] Rubyのsend()は何をするのですか?
-
[解決済み] ruby の rescue 節に複数のエラークラスを DRY に渡す方法
-
[解決済み] Rubyでオブジェクトのキーを配列として取得する
-
[解決済み] Rubyで文字列が正規表現にマッチするかどうかをチェックする最も速い方法?
-
[解決済み] Rubyで1行でメソッドを定義するには?
-
[解決済み] Rubyで配列の最後の要素を取得するには?