1

現在、次のコードを使用しています。

text = "a, 1; b, 2"
temp = []
text.gsub(/\s+/, "").split(";").each {|x| temp << x.split(",")}
temp # => [["a","1"],["b","2"]]

余分な行なしでこれをすべて1行で行うための巧妙な方法があるかどうか疑問に思っていtemp = []ますか? 各ブロックの実行結果を配列に結合するにはどうすればよいでしょうか?

ありがとう!

4

2 に答える 2

5

Enumerableモジュールは、Ruby の初心者にとって必読です。代わりにEnumerable#mapを使用してください:

text.gsub(/\s+/, "").split(";").map { |x| x.split(",") }
#=> [["a", "1"], ["b", "2"]]

関数型プログラミングの原則に慣れていないようです。ここに役立つリンクがあります(具体的には、これを参照してください)。何かを書くたびにeach、別の方法がないか考えてみてください (ファイルを書き込むなどの副作用を行うのは問題ありませんが、通常は変数を更新するのは良くありません)。

于 2012-07-10T21:10:45.873 に答える
1

あなたが提供した非常に限られたコーパスについては、#scanを使用して文字列を配列に解析し、一連のスライスをサブ配列に変換できます。例えば:

"a, 1; b, 2".scan(/\w+/).each_slice(2).to_a
=> [["a", "1"], ["b", "2"]]

これがより一般的な意味で役立つかどうかは、あなた次第です。

于 2012-07-10T21:19:57.113 に答える