Ruby 1.9.3では、RubyのString#splitメソッドが特定の結果をもたらす理由を理解しようとしています。私が得ている結果は、私が期待しているものとは逆の直観に見える。ここに例があります:String#splitから長さゼロの文字列が返される
"abcabc".split("b") #=> ["a", "ca", "c"]
"abcabc".split("a") #=> ["", "bc", "bc"]
"abcabc".split("c") #=> ["ab", "ab"]
ここで最初の例は、私が期待していたものを返します。
しかし、2番目の例では、なぜ#splitが返される配列の最初の値として長さゼロの文字列を返すのか混乱しています。これの理由は何ですか?
"abcabc".split("a") #=> ["bc", "bc"]
同じ行に沿って、3番目の例で返される末尾の長さゼロの文字列はどうして返されますか? 2番目の例が長さゼロの文字列を最初の値として返す場合、最後の例は最後の値と同じ値を返さなければなりません。
私には何が欠けていますか?
EDIT:これをもっと見ると、なぜこれがデフォルトの動作であり、なぜ私の考えが完全に間違っているのかがわかります。たとえば、CSVファイルを調べる場合、各列を分割すると、空の先頭の列が無視されるため、データが破棄されます。
また、この質問はRubyだけに関連するものではありません。他の多くの言語もまったく同じように動作することを学んでいます。私はこれを知ったとき、単にRubyを使っていました。
CSVをコンマで区切ってはいけません。引用符で囲まれた文字列にカンマが埋め込まれていると、結果が悪くなります。代わりに、Rubyの組み込みのCSVモジュールを使用してください。これは正しいことです。 –
@ the tin man:わかりました、私は一般的に話していました。ありがとう! – Threeve