【发布时间】:2014-05-25 15:59:00
【问题描述】:
我正在尝试编写一个函数,该函数返回在不重复的字符串中找到的第一个字符,到目前为止我有这个:
package main
import (
"fmt"
"strings"
)
func check(s string) string {
ss := strings.Split(s, "")
smap := map[string]int{}
for i := 0; i < len(ss); i++ {
(smap[ss[i]])++
}
for k, v := range smap {
if v == 1 {
return k
}
}
return ""
}
func main() {
fmt.Println(check("nebuchadnezzer"))
}
不幸的是,在 Go 中,当您迭代地图时,无法保证顺序,所以每次运行代码时,我都会得到不同的值,是否有任何指针?
【问题讨论】:
-
你没有定义你想要的顺序。输入顺序?代码点顺序?您是将源视为 8 位字节串还是 unicode 字符串?
-
@Krait,不将字符串视为 unicode 字符串真的有意义吗?如果他不关心我假设的 unicode,他将使用 []byte。
-
@OneOfOne 字符串在 Go 中传统上编码为 utf8,但它们也可以被视为任意字节字符串。没有社区强调 []byte 仅在已知“字符串”不是 utf8 时使用。
标签: go