我目前使用下面的代碼:將塊的結果連接到沒有temp變量的數組中?
text = "a, 1; b, 2"
temp = []
text.gsub(/\s+/, "").split(";").each {|x| temp << x.split(",")}
temp # => [["a","1"],["b","2"]]
我不知道是否有得到這個工作都在一條線路沒有額外temp = []
線光滑的方法是什麼?如何將每個塊的執行結果加入到一個數組中?
謝謝!
我目前使用下面的代碼:將塊的結果連接到沒有temp變量的數組中?
text = "a, 1; b, 2"
temp = []
text.gsub(/\s+/, "").split(";").each {|x| temp << x.split(",")}
temp # => [["a","1"],["b","2"]]
我不知道是否有得到這個工作都在一條線路沒有額外temp = []
線光滑的方法是什麼?如何將每個塊的執行結果加入到一個數組中?
謝謝!
Enumerable模塊是任何Ruby新手必讀的。使用Enumerable#map代替:
text.gsub(/\s+/, "").split(";").map { |x| x.split(",") }
#=> [["a", "1"], ["b", "2"]]
看來你不熟悉函數式編程的原則,在這裏它是一個link它可以幫助您(具體爲:see this)。每當你寫一個each
時,請考慮是否有其他選擇(可以像寫文件那樣做副作用,但更新變量通常是個壞主意)。
對於您提供的非常有限的語料庫,可以使用#scan將字符串解析爲數組,然後將一系列切片轉換爲子數組。例如:
"a, 1; b, 2".scan(/\w+/).each_slice(2).to_a
=> [["a", "1"], ["b", "2"]]
無論這是否在更廣泛的意義上是有用的取決於您。
'text.split(「;」).map {| x | x.split(「,」)}',避免了一個額外的字符串,是一個選項。 – steenslag 2012-07-10 21:57:55
@tokland謝謝!你(或其他人)是否知道一組練習(類似於教科書),以便用於在Ruby或任何其他語言中練習這些函數式編程技術? – 2012-07-11 21:02:18
「Ruby最佳實踐」在FP上有一章:http://my.safaribooksonline.com/book/web-development/ruby/9780596157487/functional-programming-techniques/i_sect15_d1e7222。請查看這個偉大的視頻:http://vimeo.com/6701329。 Ruby不是一種功能語言,所以沒有太多的材料。你總是可以學習Haskell或Erlang或Scala或OCaml。 – tokland 2012-07-11 21:09:23