在字串中有效存取隨機符文元素
在Go 中,存取字串的隨機符文元素會帶來挑戰,因為字串表示為序列UTF-8 編碼位元組數。可用的 str[i] 運算子傳回一個字節,而 for ... range 會自動解碼位元組以提供符文元素。
迭代方法的低效率
迭代問題中提供的方法 RuneElement() 重複迭代字串以擷取指定索引處的元素。雖然這種方法有效,但對於頻繁訪問來說可能會變得效率低下。
為什麼沒有直接存取功能?
由於設計決策將字串表示為位元組序列,因此沒有像 str.At(i) 這樣的內建函數可以直接傳回特定索引處的符文元素。 UTF-8 解碼過程對於存取符文元素至關重要,無法繞過。
快取以提高效率
如果特定的符文經常需要隨機存取設定字串,快取可以提高效率。以下是快取機制的範例:
var cache = map[string][]rune{} func RuneAt(s string, idx int) rune { rs := cache[s] if rs == nil { rs = []rune(s) cache[s] = []rune(s) } if idx >= len(rs) { return 0 } return rs[idx] }
此快取儲存從字串到其對應符文切片的對應。如果某個字串之前未被緩存,則會對其進行解碼並緩存以供將來存取。快取可以顯著提高頻繁存取相同字串的符文元素的效能。
以上是如何有效率地存取Go字串中的隨機符文元素?的詳細內容。更多資訊請關注PHP中文網其他相關文章!