第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將字符串的 charAtIndex 轉(zhuǎn)換為 ASCII 等效 int 值

如何將字符串的 charAtIndex 轉(zhuǎn)換為 ASCII 等效 int 值

Go
慕田峪9158850 2023-08-14 16:22:57
我有一組字符串 (ASCII),我想將其分配給一個字符串數(shù)組(第 128 章)。字符串在數(shù)組中的位置由字符串第一個字符的 ASCII 值決定。喜歡..strArr := [128]string{}strA := "A string"strB := "B string"strArr[65] = strA // since strA started with 'A' & ASCII('A') = 65strArr[66] = strB // since strB started with 'B' & ASCII('B') = 66有一種使用utf8包的解決方案,例如......r, _ := utf8.DecodeRuneInString(strA)strArr[r] = strA是否可以對這個解決方案進行時間優(yōu)化?
查看完整描述

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上的示例。



查看完整回答
反對 回復 2023-08-14
  • 1 回答
  • 0 關(guān)注
  • 144 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號