l'éditeur php Strawberry vous présente un outil pratique appelé "Fonction universelle pour convertir une carte en liste dans GO". Cette fonction peut vous aider à convertir la structure de données de la carte clé-valeur (Map) en une structure de données de liste (List). Grâce à cette fonction générale, vous pouvez facilement convertir des structures de données complexes en une forme plus concise, améliorant ainsi la lisibilité et la maintenabilité de votre code. Que vous ayez rencontré des besoins similaires en matière de développement ou que vous souhaitiez en savoir plus sur les techniques de conversion de structure de données, cette fonction universelle vous apportera commodité et inspiration. Explorons ensemble cet outil utile !
Comment écrire une fonction en go qui convertit n'importe quelle carte en liste d'objets (suppression de clés) ?
Par exemple :
func maptolist(inputmap map[any]any) any { var resultlist []any for _, obj := range inputmap { resultlist = append(resultlist, obj) } return resultlist } func main() { mymap := make(map[string]string) mymap["a"] = "1" mymap["b"] = "12" l := maptolist(mymap).([]string) fmt.printf("(%v, %t)\n", l, l) }
affichera : ([1 12], []string)
Mais j'ai toujours des problèmes de type et je n'ai pas trouvé de solution. J'ai eu un problème similaire lors de l'utilisation d'assertions de type ou de conversions.
cannot use myMap (variable of type map[string]string) as map[any]any value in argument to mapToList
Comment dois-je écrire la fonction maptolist() ?
Il doit être pris en entrée inputmap map[any]any
或 inputmap any
car je veux passer n'importe quel type de carte (map[string]customstruct; map[int][]customstruct etc.)
Mise à jour : j'ai ajouté la fonction et plus de détails sur les entrées lorsque je l'ai écrit pour la première fois
Voir ce tutoriel sur les génériques ou la Spécification du langage
any
不是变量类型,它是一个type约束
,可以使用的类型的描述。您需要使用约束 any
Définissez les paramètres de type puis référencez le type générique à partir de la signature du paramètre.
// | from this point on, k and v are // | now valid types to use in the function func maptoslice[k comparable, v any](m map[k]v) []v { s := make([]v, 0, len(m)) for _, v := range m { s = append(s, v) } return s }
paramètresm
必须是map[k]v
,其中k
是comparable
类型,v
是any
类型。返回类型 []v
seront des tranches du même type que les valeurs de la carte d'entrée.
Veuillez noter que any
不能用作映射键的约束,因为并非所有类型都可以用作键,只有 可比较的
tapez.
Ensuite, pour appeler la méthode, transmettez un type qui satisfait la contrainte (par exemple map[string][]string
), en affichant éventuellement explicitement le paramètre de type.
m := map[string][]string{ "a": {"b", "c"}, "d": {"e", "f"}, } s := maptoslice(m) // or t := maptoslice[string, []string](m) // [[b c] [e f]]
En étant explicite sur les types, vous pouvez documenter votre code vous-même et détecter tout problème de type inattendu. Par exemple, le code suivant renverra une erreur :
v := mapToSlice[string, []int](m) ... ./main.go:14:33: cannot use m (variable of type map[string][]string) as map[string][]int value in argument to mapToSlice[string, []int]
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!