目前没有办法以 perl 的方式进行。您只需要迭代切片,并将切片元素放在地图中,例如作为地图的关键:
func main() {
var elements []string
var elementMap map[string]string
elements = []string{"abc", "def", "fgi", "adi"}
// initialize map
elementMap = make(map[string]string)
// put slice values into map
for _, s := range elements {
elementMap[s] = s
// or just keys, without values: elementMap[s] = ""
}
// print map
for k := range elementMap {
fmt.Println(k)
}
}
根据您要执行的操作,您必须记住一件事:映射键是唯一的,因此如果您的切片包含重复的字符串,您可能需要使用 map[string]int 来保持计数:
func main() {
var elements []string
var elementMap map[string]int
elements = []string{"abc", "def", "fgi", "adi", "fgi", "adi"}
// initialize map
elementMap = make(map[string]int)
// increment map's value for every key from slice
for _, s := range elements {
elementMap[s]++
}
// print map
for k, v := range elementMap {
fmt.Println(k, v)
}
}
而且您总是可以将该功能包装在一个 func 中:
func sliceToStrMap(elements []string) map[string]string {
elementMap := make(map[string]string)
for _, s := range elements {
elementMap[s] = s
}
return elementMap
}
func sliceToIntMap(elements []string) map[string]int {
elementMap := make(map[string]int)
for _, s := range elements {
elementMap[s]++
}
return elementMap
}