由於今天要做乙個大批量資料的遍歷工作,其中有乙個**要執行一條字串賦值語句,類似於這樣的語句:
str = "##" # case 1
猶豫著是要用寫這以上的方法(比較習慣的做法),還是寫成以下方法好點:
str = title + id # case 2
說明:用case 1不會出現轉型報錯的現象,會直接把非字串,如int, float轉化成字串再輸出
用case 2則有時會報型別不匹配的錯誤,比如id若是int型別,會報錯.
果斷做了個測試,結果出來了.
os: win7, 64bit cpu: 4 core, 8 thread cpu
@@name = "the name" def single_str(len) i = 0 while(i < len) do j = i.to_s str = j i += 1 end end def join_strs(len) i = 0 while(i < len) do j = i.to_s str = "##" i += 1 end end def add_strs(len) i = 0 while(i < len) do j = i.to_s str = @@name + j i += 1 end end require 'benchmark' benchmark.bm do |x| len = 1000*1000*1 # case: 1,10,100 x.report("single_strs(#):") x.report("join_strs(#):") x.report("add_strs") end
結果:
(1000*1000*1) user system total real single_strs(1000000) : 0.218000 0.000000 0.218000 ( 0.208012) join_strs(1000000) : 0.608000 0.000000 0.608000 ( 0.607035) add_strs(1000000) : 0.468000 0.000000 0.468000 ( 0.477027)
(1000*1000*10) user system total real single_strs(10000000) : 2.169000 0.000000 2.169000 ( 2.169124) join_strs(10000000) : 6.177000 0.000000 6.177000 ( 6.174353) add_strs(10000000) : 4.852000 0.000000 4.852000 ( 4.858278)
(1000*1000*100) user system total real single_strs(100000000): 22.464000 0.000000 22.464000 ( 22.460284) join_strs(100000000) : 62.635000 0.031000 62.666000 ( 62.688586) add_strs(100000000) : 49.624000 0.000000 49.624000 ( 49.653840)
答案很明顯了,字串相加的方式還是比較有優勢,所以情況允許的話,還是少用一下用列印的方式進行字串結合.
ruby分割字串 Ruby字串
構建方法 str hello world 只允許 與 轉義 str hello world 允許所有轉義和 字串拼接 str q hello world 等同單引號 str q 等同雙引號 str hello world eosstr abc 2 abcabc 索引str abc s str 1 s...
字串的賦值
字串表示方法 char str 20 char ch 賦值操作 1 定義的時候賦值 char str 20 what pity char ch how are you 2 用字串複製函式 strcpy str,what pity 但是對於用指標表示的字串變數用複製函式賦值會出現問題,需要先申請記憶體...
Ruby字串操作
ruby提供了強大的字串操作能力。字串合併 可以使用常見的 cn 123 45 puts cncn 789 是連線操作,就是將 789 新增到cn中。字串還可以用 來表示複製次數。puts abc 3 一些字串函式 captitalize 首字母大寫 swapcase strip 去掉首尾空格 ls...