Existe-t-il un moyen facile/simple de convertir une tranche en carte à Golang? Comme convertir un tableau en hachage en Perl est facile à faire avec une affectation simple comme %hash = @array
ce qui précède convertira tous les éléments du tableau en un hachage, les clés étant des éléments d'index de numéro pair tandis que les valeurs seront des éléments d'index de numéro impair du tableau.
Dans mon code Go, j'ai des tranches de chaîne et je voudrais le convertir en carte. Je me demande s'il existe un code de bibliothèque Go pour ce faire.
func main() {
var elements []string
var elementMap map[string]string
elements = []string{"abc", "def", "fgi", "adi"}
}
la tranche d'éléments doit être convertie en carte de chaînes, elementMap
.
merci
Utilisez une boucle 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
La bibliothèque standard n'a pas de fonction pour ce faire.
Il n'y a actuellement aucun moyen de le faire à la manière de Perl. Il vous suffit d'itérer la tranche et de placer les éléments de tranche dans votre carte, par ex. comme clé de la carte:
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)
}
}
Selon ce que vous voulez faire, vous devez garder une chose à l'esprit: les clés de carte sont uniques, donc si votre tranche contient des chaînes en double, vous voudrez peut-être compter en utilisant un 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)
}
}
Et vous pouvez toujours envelopper cette fonctionnalité dans une fonction:
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
}