String to Array


#1

請問大大我有一個字串 s = “1, 2, 3"
我用Array.wrap( s )可以得到一個陣列, 不過不是[ 1, 2, 3 ], 而是[“1,2,3”]
後來我用s.split(”,")就可以得到我想要的陣列[ 1, 2, 3 ]
想請教各位大大有更好的做法嗎?
之前有聽過陣列一多,split好像會有效能上的問題?


#2

如果是初始宣告,你可以用類似

wer = %w%  1  2  3  %
#=> ["1","2","3"]
wer = %w% 1,2,3 %
#=> ["1,2,3"]

你可以看得出分別,特殊符號的 doc 在這裡
http://ruby-doc.org/docs/ruby-doc-bundle/ProgrammingRuby/book/language.html#UB

再來是裁切,其實 Ruby 下有一大票的裁切方式 … 類似

s = "1,2,3"
s.split(',') #=> ["1", "2", "3"]
s.split(/,/) #=> ["1", "2", "3"]
s.scan(/\d+/) #=> ["1", "2", "3"]
...

甚至用 match 也可以,其實大都是過 regex,至於你說的 … 速度慢的問題,每次看到這種問題,我都會建議 … 你為什麼不先測試一下,然後再來評估是否慢如何?而非人家說啥 … 你就認為是啥唄|||

t = Time.now.to_f ; 10000.times do ; end ; puts Time.now.to_f - t
#=> 0.0004467964172363281 #這是跑一萬次空迴圈所需要的時間:0.4 毫秒 = 0.0004 秒
t = Time.now.to_f ; 10000.times do "1,2,3".split(/,/) end ; puts Time.now.to_f - t
#=> 0.01901102066040039 # 19 毫秒,丟 regex 進去
t = Time.now.to_f ; 10000.times do "1,2,3".split(',') end ; puts Time.now.to_f - t
#=> 0.006119966506958008 # 6 毫秒,丟分隔符進去

這是一萬次的狀況,而你程式的一個 run 會跑幾次 split 這個 method?再者,你知道網路延遲一次大約都幾百毫秒的在跳,你的這個『效能上的問題』是真的有關係嗎?然而真正追求效能,架構調整一次都是幾百倍的差異在調,而非這個一點點,最後,你真的是要極致的效能,你應該去玩 crystal 而非 ruby? anyway 花時間想想我說的東西唄


#3

我都用 %w( ... ) (喂