1 回答

TA貢獻1852條經(jīng)驗 獲得超1個贊
如果您可以確定您的字符串不為空并且它們的第一個符文在 的范圍內(nèi)0..127,您可以簡單地執(zhí)行以下操作:
strArr[strA[0]] = strA
strArr[strB[0]] = strB
因為索引字符串索引它們的 UTF-8 編碼字節(jié)(這就是 Go 在內(nèi)存中存儲字符串的方式),而符文在映射到字節(jié) 1 到 1 的范圍內(nèi)0..127,所以第一個字節(jié)是第一個 的值rune。
當然,如果strA或strB為空或者它們的第一個符文不落在 的范圍內(nèi)0..127,上面的代碼將會出現(xiàn)恐慌。
您可以通過檢查字符串及其之前的第一個字節(jié)來避免恐慌,例如:
func set(s string) {
if s == "" || s[0] > 127 {
return
}
strArr[s[0]] = s
}
此set()函數(shù)對s字符串進行兩次索引(第一次是在檢查第一個符文/字節(jié)是否在有效范圍內(nèi)時,第二次是在索引時strArr)。我們可以存儲第一個索引的結(jié)果并在第二種情況下重用該結(jié)果,這可能會也可能不會提高性能:
func set2(s string) {
if s != "" {
return
}
if first := s[0]; first <= 127 {
strArr[first] = s
}
}
嘗試Go Playground上的示例。
- 1 回答
- 0 關(guān)注
- 144 瀏覽
添加回答
舉報