• ベストアンサー

rubyのループ文の中でのsplitの挙動について

宜しくお願いします。 Rubyで配列の中の文字列をsplitして多重配列にしたいと考えています。 例えば @memberという変数の中に [ "012,234,567", "8910,111213,141516", ・・・ ] のような文字列の配列があるとします。 これを(/,/)でsplitして [ ["012","234",567] ["8910","111213","141516"] [・・・] ] (・・・は同じような配列が続いているだけです。) のような配列に変更したいと思っていますが うまくいきません。 @member.each do |mem| mem.split(/,/) end のような書き方でやってみましたが、結果は変化なし。 @member.each do |mem| #mem.split(/,/) mem =mem.split(/,/) #結果の処理内容をここに end と書くと、このループ文の中でしか機能しません。 どのような書き方をすれば変数にsplitした結果を 取り込めるのでしょうか。 どうぞ宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.1

@memberを直接更新することは、考えないで、 一旦別の配列を作ることを考えてはいかがでしょうか。 以下のようにすると、aryに望む結果が取り込めます。 @member = [ "123,456,789", "1,4,7", "56,789,0,0," ] ary = Array.new @member.each do |mem| ary << mem.split(",") end p ary #@member = ary #p @member もし、そのaryの内容を@memberに設定したなら 最後の2行のコメントをはずして下さい。

hige1192
質問者

お礼

なるほど・・・新しい配列を生成して そこに放り込めばよかったのですね。 PHPでも同じような事をして強引に通していたので rubyでつまづき、悩んでました。 有難うございました^^ 期待通りの結果が出ました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.2

mapを使うのはどうでしょうか。 a = @member.map do |mem| mem.split(/,/) end とすれば変数aにsplitで得られた配列の配列が設定されます。

参考URL:
http://www.ruby-lang.org/ja/man/html/Enumerable.html#map
hige1192
質問者

お礼

なるほど、mapを使うとここまでシンプルに 記述できるのですね。 ちょっとmapについてもちっと勉強してみます。 有難う御座いました。 こちらも試してみますね

すると、全ての回答が全文表示されます。

関連するQ&A