[GOLANG] Valeurs unique de chaque maps "map[string]map[string]string"
Exileur
Messages postés
1475
Date d'inscription
Statut
Membre
Dernière intervention
-
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour à tous,
Je cherche un moyen d'optimiser la fonction que j'ai écrit qui me permet determiner les clés/valeurs uniques, elles méme présentent dans plusieurs maps.
J'ai en valeur d'entré cette structure: map[string]map[string]string
J'ai en valeur de sortie cette structure: map[string][]string
La fonction que j'ai écrit:
Je suis pas fan de mes boucles dans mes boucles et je me demande s'il n'existerait pas déja des fonctions ou libs qui font le travaille...
J'ai déja vu des fonctions qui s'appelle elle même, mais je vois pas comment l'implémenter ni ne sais le reel gain de perf que ça peut permettre.
Si quelqu'un voit comment on peut faire plus propre et joli je suis preneur !
Bien à vous
Exil'
Je cherche un moyen d'optimiser la fonction que j'ai écrit qui me permet determiner les clés/valeurs uniques, elles méme présentent dans plusieurs maps.
J'ai en valeur d'entré cette structure: map[string]map[string]string
{ "deploymentAbc": { "app": "nginx", "env": "dev", "composant": "nginx", "type": "frontend" }, "deploymentBcd": { "app": "mongo", "env": "dev", "composant": "mongo-db", "type": "database" }, "deploymentEfg": { "app": "mongo", "env": "dev", "composant": "mongo-express", "type": "database" }, "deploymentHij": { "app": "php", "env": "dev", "composant": "authz", "type": "backend" } }
J'ai en valeur de sortie cette structure: map[string][]string
{ "deploymentAbc": [ "app=nginx", "composant=nginx", "type=frontend" ], "deploymentBcd": [ "composant=mongo-db" ], "deploymentEfg": [ "composant=mongo-express" ], "deploymentHij": [ "app=php", "composant=authz", "type=backend" ] }
La fonction que j'ai écrit:
func FindUniqueLabels(composants map[string]map[string]string) map[string][]string { unique := make(map[string][]string, len(composants)) for composant, o := range composants { for labelName, labelValue := range o { skip := false label := fmt.Sprintf("%s=%s", labelName, labelValue) for composantO, uo := range composants { if composant != composantO { for labelNameO, labelValueO := range uo { labelO := fmt.Sprintf("%s=%s", labelNameO, labelValueO) if label == labelO { skip = true } } } } if !skip { unique[composant] = append(unique[composant], label) } } } return unique }
Je suis pas fan de mes boucles dans mes boucles et je me demande s'il n'existerait pas déja des fonctions ou libs qui font le travaille...
J'ai déja vu des fonctions qui s'appelle elle même, mais je vois pas comment l'implémenter ni ne sais le reel gain de perf que ça peut permettre.
Si quelqu'un voit comment on peut faire plus propre et joli je suis preneur !
Bien à vous
Exil'
Configuration: Linux / Chrome 94.0.4606.71
A voir également:
- [GOLANG] Valeurs unique de chaque maps "map[string]map[string]string"
- Google maps satellite - Guide
- Google maps - Guide
- Si vous utilisez Google Maps, vous allez devoir faire un choix très important - Guide
- Maps - Accueil - Transports & Cartes
- Telecharger google maps pc - Télécharger - Téléchargement & Transfert
2 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour,
le point de départ, ce serait d'expliquer ce que doit réaliser le programme.
"determiner les clés/valeurs uniques, elles méme présentent dans plusieurs maps", ce n'est pas trop clair.
ce que tu appelles valeur d'entré et valeur de sortie, c'est un exemple de ce que tu attends de ton programme?
le point de départ, ce serait d'expliquer ce que doit réaliser le programme.
"determiner les clés/valeurs uniques, elles méme présentent dans plusieurs maps", ce n'est pas trop clair.
ce que tu appelles valeur d'entré et valeur de sortie, c'est un exemple de ce que tu attends de ton programme?
Hello, merci pour ta réponse !
Effectivement, je n'ai pas donné beaucoup de contexte...
Je suis en train d'écrire un programme d'autogénération de tests, en me basant sur l'api Kubernetes pour découvrir les différents objets.
À un moment donné, j'ai besoin de pouvoir identifier clairement un composant d'un autre, par un label.
Les labels n'étant pas uniformisés, j'ai eu besoin de trouver un moyen de déterminer dynamiquement quel est le label (clé/valeur) unique pour chacun des composants, d'où l'écriture de cette fonction
Ce que je présente comme "valeur d'entrée" est la data fourni en entrée à ma fonction "FindUniqueLabels"
Ce que je présente comme "valeur de sortie" est la data fourni en sortie par ma fonction.
N'étant pas super satisfait de la fonction que j'ai écrite ( qui fonctionne, cela dit), je souhaite l'optimiser ou bénéficier de l'expérience d'autres en matière d'algo pour rendre le code plus lisible / propre / optimisé ! :)
Le source est là si jamais :)
https://github.com/Vr00mm/litmus-hub-gen-auto/blob/main/pkg/requirements/requirements.go#L9
Effectivement, je n'ai pas donné beaucoup de contexte...
Je suis en train d'écrire un programme d'autogénération de tests, en me basant sur l'api Kubernetes pour découvrir les différents objets.
À un moment donné, j'ai besoin de pouvoir identifier clairement un composant d'un autre, par un label.
Les labels n'étant pas uniformisés, j'ai eu besoin de trouver un moyen de déterminer dynamiquement quel est le label (clé/valeur) unique pour chacun des composants, d'où l'écriture de cette fonction
Ce que je présente comme "valeur d'entrée" est la data fourni en entrée à ma fonction "FindUniqueLabels"
Ce que je présente comme "valeur de sortie" est la data fourni en sortie par ma fonction.
N'étant pas super satisfait de la fonction que j'ai écrite ( qui fonctionne, cela dit), je souhaite l'optimiser ou bénéficier de l'expérience d'autres en matière d'algo pour rendre le code plus lisible / propre / optimisé ! :)
Le source est là si jamais :)
https://github.com/Vr00mm/litmus-hub-gen-auto/blob/main/pkg/requirements/requirements.go#L9
Veux-tu simplement éliminer tous les labels utilisés plusieurs fois?
Il n'est pas utile de parcourir toute la structure source, tu pourrais t'arrêter dès que tu as trouvé un doublon.
Moi je ferais plutôt ainsi:
Si je devine ce que fait ton code, tu parcours ta structure source, et, pour chaque label,
tu parcours la structure source complète pour vérifier si il n'est pas présent ailleurs.
Si le label n'est pas trouvé ailleurs, tu le copies dans la structure de destination
Il n'est pas utile de parcourir toute la structure source, tu pourrais t'arrêter dès que tu as trouvé un doublon.
Moi je ferais plutôt ainsi:
Je recopie la structure source vers la destination (si je veux préserver la structure source).
Ensuite, je parcours la structure destination, et, pour chaque label:
je parcours la suite de la structure destination
(pas depuis le début, mais à partir du composant
suivant le composant ayant ce label)
si je rencontre un doublon, je l'élimine
si j'ai rencontré un doublon du label, j'élimine le label