1 回答
TA贡献1866条经验 获得超5个赞
问题是,当您将元素添加到切片(位于地图内)时,您必须重新分配结果切片,因为append()返回包含附加项的新切片标头:
if val, ok := m[ext]; ok {
val = append(val, file)
m[ext] = val
} else {
// ...
}
或者简单地说:
m[ext] = append(m[ext], file)
这也处理 if extis not yet in map,因为 thenm[ext]将是值类型(即[]string)的零值,而零值是nil切片。您可以附加到nil切片。
另外要获得扩展名,请使用filepath.Ext().
您的group()功能可以像这样简单:
func group(names []string) map[string][]string {
m := map[string][]string{}
for _, name := range names {
ext := filepath.Ext(name)
ext = strings.TrimPrefix(ext, ".")
m[ext] = append(m[ext], name)
}
return m
}
测试它:
fmt.Println(group([]string{"x\\a.txt", "b.txt", "c.go"}))
fmt.Println(group([]string{"a.go", "xy\\b.go", "c.txt"}))
哪些输出(在Go Playground上尝试):
map[go:[c.go] txt:[x\a.txt b.txt]]
map[go:[a.go xy\b.go] txt:[c.txt]]
- 1 回答
- 0 关注
- 119 浏览
添加回答
举报