如何将字符串的 charAtIndex 转换为 ASCII 等效 int 值

我有一组字符串(ASCII),我想将其分配给一个字符串数组(上限为 128)。字符串在数组中的位置由字符串的第一个字符的 ASCII 值决定。像..


strArr := [128]string{}

strA := "A string"

strB := "B string"

strArr[65] = strA // since strA started with 'A' & ASCII('A') = 65

strArr[66] = strB // since strB started with 'B' & ASCII('B') = 66

有一种使用utf8包的解决方案,例如...


r, _ := utf8.DecodeRuneInString(strA)

strArr[r] = strA

是否可以对这个解决方案进行时间优化?


青春有我
浏览 118回答 1
1回答

暮色呼如

如果您可以确定您的字符串不为空并且它们的第一个符文在 范围内0..127,您可以简单地执行以下操作:strArr[strA[0]] = strAstrArr[strB[0]] = strB因为索引字符串索引它们的 UTF-8 编码字节(这就是 Go 在内存中存储字符串的方式),并且 rune 在0..127map 到字节 1 到 1 的范围内,所以第一个字节是 first 的值rune。当然,如果strAorstrB为空或者他们的第一个 rune 不在 范围内0..127,上面的代码就会恐慌。您可以通过检查字符串及其之前的第一个字节来避免恐慌,例如:func set(s string) {&nbsp; &nbsp; if s == "" || s[0] > 127 {&nbsp; &nbsp; &nbsp; &nbsp; return&nbsp; &nbsp; }&nbsp; &nbsp; strArr[s[0]] = s}此set()函数索引s字符串两次(首先检查第一个符文/字节是否在有效范围内,然后索引strArr)。我们可以存储第一次索引的结果并在第二种情况下重用它,这可能会或可能不会提高性能:func set2(s string) {&nbsp; &nbsp; if s != "" {&nbsp; &nbsp; &nbsp; &nbsp; return&nbsp; &nbsp; }&nbsp; &nbsp; if first := s[0]; first <= 127 {&nbsp; &nbsp; &nbsp; &nbsp; strArr[first] = s&nbsp; &nbsp; }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go