是否有一个片转换成Golang地图的简单/简单的方法?像变换的阵列成散列在Perl很容易用简单的赋值像%hash = @array
这上面将所述阵列中的所有元素转换成散列值,与键在偶数索引的元素,而值将是奇数索引元件做阵列。
在我去的代码,我有串片,并想将其转换为一个地图。我想知道是否有去图书馆的代码来做到这一点。
func main() {
var elements []string
var elementMap map[string]string
elements = []string{"abc", "def", "fgi", "adi"}
}
元素切片应该被转换为地图串,elementMap
。
谢谢
使用for循环:
elements = []string{"abc", "def", "fgi", "adi"}
elementMap := make(map[string]string)
for i := 0; i < len(elements); i +=2 {
elementMap[elements[i]] = elements[i+1]
}
runnable example on the playground
标准库没有一个函数来做到这一点。
目前还没有办法做到这一点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
}