Table des matières
Contenu de la question
Solution de contournement
Maison développement back-end Golang Fonction universelle pour convertir une carte en liste dans GO

Fonction universelle pour convertir une carte en liste dans GO

Feb 13, 2024 pm 08:30 PM
键值对

GO 中将 Map 转换为 List 的通用函数

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 !

Contenu de la question

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)
}
Copier après la connexion

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
Copier après la connexion

Comment dois-je écrire la fonction maptolist() ?

Il doit être pris en entrée inputmap map[any]anyinputmap 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

Solution de contournement

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
}
Copier après la connexion
Les

paramètresm必须是map[k]v,其中kcomparable类型,vany类型。返回类型 []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]]
Copier après la connexion

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]
Copier après la connexion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Article chaud

Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Article chaud

Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

La différence entre les crochets et les accolades dans Vue La différence entre les crochets et les accolades dans Vue May 02, 2024 pm 10:06 PM

La différence entre les crochets et les accolades dans Vue

Comment convertir le tableau de résultats d'une requête MySQL en objet ? Comment convertir le tableau de résultats d'une requête MySQL en objet ? Apr 29, 2024 pm 01:09 PM

Comment convertir le tableau de résultats d'une requête MySQL en objet ?

Quelles sont les méthodes courantes pour convertir des tableaux en objets en PHP ? Quelles sont les méthodes courantes pour convertir des tableaux en objets en PHP ? Apr 28, 2024 pm 10:54 PM

Quelles sont les méthodes courantes pour convertir des tableaux en objets en PHP ?

Comment utiliser la carte dans vue Comment utiliser la carte dans vue May 02, 2024 pm 09:54 PM

Comment utiliser la carte dans vue

Structures de données et algorithmes Java : explication détaillée Structures de données et algorithmes Java : explication détaillée May 08, 2024 pm 10:12 PM

Structures de données et algorithmes Java : explication détaillée

Le rôle des méthodes dans vue Le rôle des méthodes dans vue Apr 28, 2024 am 12:00 AM

Le rôle des méthodes dans vue

Comment implémenter des structures de données sans verrouillage dans la programmation simultanée Java ? Comment implémenter des structures de données sans verrouillage dans la programmation simultanée Java ? May 02, 2024 am 10:21 AM

Comment implémenter des structures de données sans verrouillage dans la programmation simultanée Java ?

Après avoir fusionné des tableaux PHP, comment conserver la correspondance clé-valeur ? Après avoir fusionné des tableaux PHP, comment conserver la correspondance clé-valeur ? Apr 29, 2024 am 09:21 AM

Après avoir fusionné des tableaux PHP, comment conserver la correspondance clé-valeur ?

See all articles