我正在编写一个函数来删除字符串中的重复字符。这是我的方法。当我运行以下测试时,为什么会出现此错误?我是 Go 的新手,习惯了更动态的语言,比如 Ruby/Python。panic: assignment to entry in nil map [recovered] panic: assignment to entry in nil map源码func removeDuplicate(s string) string { var m map[string]int var c_string []string = strings.Split(s, "") for i :=0; i < len(c_string); i++ { m[c_string[i]] = 0 } for i :=0; i < len(c_string); i++ { m[c_string[i]] = m[c_string[i]] + 1 } var ( result string = "" ) for i :=0; i < len(c_string); i++ { if m[c_string[i]] < 1 { result = result + c_string[i] } } return result}source_test.gofunc TestRemoveDuplicateChars(t *testing.T) { got := removeDuplicateChars("abbcde") if got != "abcde" { t.Fatalf("removeDuplicateChars fails") }}
1 回答
ITMISS
TA贡献1871条经验 获得超8个赞
因为您实际上还没有 initilize/allocated m
,所以您只是声明了它。做这个;var m map[string]int
进入m := map[string]int{}
。
在同一个语句中进行初始化和赋值。您还可以添加另一行m = make(map[string]int)
来防止错误,尽管我个人更喜欢压缩语法。
仅供参考,您的代码在此行中呕吐;m[c_string[i]] = 0
,将错误消息与上述信息结合起来时,错误消息应该是有意义的。
- 1 回答
- 0 关注
- 175 浏览
添加回答
举报
0/150
提交
取消