1 回答

TA贡献1852条经验 获得超1个赞
如果您可以确定您的字符串不为空并且它们的第一个符文在 的范围内0..127,您可以简单地执行以下操作:
strArr[strA[0]] = strA
strArr[strB[0]] = strB
因为索引字符串索引它们的 UTF-8 编码字节(这就是 Go 在内存中存储字符串的方式),而符文在映射到字节 1 到 1 的范围内0..127,所以第一个字节是第一个 的值rune。
当然,如果strA或strB为空或者它们的第一个符文不落在 的范围内0..127,上面的代码将会出现恐慌。
您可以通过检查字符串及其之前的第一个字节来避免恐慌,例如:
func set(s string) {
if s == "" || s[0] > 127 {
return
}
strArr[s[0]] = s
}
此set()函数对s字符串进行两次索引(第一次是在检查第一个符文/字节是否在有效范围内时,第二次是在索引时strArr)。我们可以存储第一个索引的结果并在第二种情况下重用该结果,这可能会也可能不会提高性能:
func set2(s string) {
if s != "" {
return
}
if first := s[0]; first <= 127 {
strArr[first] = s
}
}
尝试Go Playground上的示例。
- 1 回答
- 0 关注
- 108 浏览
添加回答
举报