在寫 lua debugger 的時(shí)候,我需要判斷一個(gè)字符串的前綴是不是 "@" 。
有三個(gè)方案:
1.比較直觀的是 string.sub(str,1,1) == "@"
2.感覺效率比較高的是 string.byte(str) == 64
3.或者是 string.find(str,"@") == 1
我推薦第三種。(注:在此特定運(yùn)用環(huán)境下。因?yàn)橛糜谂卸?source 的文件名,大多數(shù)情況都是 @ 開頭。如果結(jié)果為非,則性能較低)
第一方案 string.sub 會(huì)在生成子串的時(shí)候做一次字符串 hash ,感覺效率會(huì)略微低一些。
第二方案效率應(yīng)該是最好,但是需要記住 @ 的 ascii 碼 64 。如果前綴是多個(gè)字符也不適用。
性能對比測試:
復(fù)制代碼 代碼如下:
string.find(sb, "@") == 1 3.671
string.find(sb, "^@") ~= 1 3.735
string.byte(sa) == 64 2.14
string.char(string.byte(sb)) == "@" 4.375
string.sub(sb,1,1) == "@" 2.766
sb[1] == "@" 0.984
要想解決不以@開頭時(shí)的性能問題,可以改成這樣:
復(fù)制代碼 代碼如下:
string.find(str,"^@") == 1