Obtenez de l'indice de l'élément de la matrice / tranche ou la touche de la valeur de la carte en Aller?

J'ai une liste de chaînes de caractères (qui sont constantes, par exemple, une liste de pays), que j'aimerais être en mesure d'obtenir la chaîne lors de la prestation de énumérées int valeur, et vice-versa être en mesure d'obtenir énumérés int valeur lors de la fourniture de la chaîne. C'est dans le but de traduire entre les deux pour les transactions de base de données.

var MyData = [...]string {
  "string1", //index 0
  "string2", //index 1
  "string3", //index 2  
}

Qui est facile pour un langage comme python, où l'on peut tout simplement faire quelque chose comme MyData[1] pour obtenir des "chaîne2" et MyData.index("chaîne2") pour obtenir 1.

Quelques solutions possibles serait de

  • écrire ma propre fonction pour obtenir l'index par itération sur le tableau /tranche
  • trier le tableau /tranche et l'utilisation d'une fonction de recherche à l'indice de rendement (si ce n'est pas de permettre à une séquence non triée, qui est ce que je préfère)
  • maintenir une carte et un tableau miroir les uns des autres, qui est sujette à des erreurs.

Parlant de cartes, peut-on accéder à la clé une valeur particulière? Alors je pourrais tout simplement avoir une carte comme la suivante, et être en mesure d'obtenir les clés de la chaîne lors de la fourniture de la valeur int.

var MyData = map[string]int {
  "string1": 0,
  "string2": 1,
  "string3": 2,
}

Mise à JOUR: Avant que j'accepte ma réponse, je tiens à expliquer le problème de manière plus approfondie, dont je sais qu'il doit être assez commun. J'ai pratiquement un ensemble de chaînes de caractères qui sont constants (comme une liste de pays) associés chacun à une valeur entière. Dans ma base de données j'ai simplement stocker le nombre entier pour économiser de l'espace, puisqu'il y a des millions d'entrées. Mais quand je l'affiche d'une entrée de la base de données j'ai besoin d'afficher la chaîne de valeur pour qu'elle soit lisible pour l'utilisateur. Un simple tableau va faire pour que. Cependant, j'ai aussi besoin d'ajouter des entrées à la base de données (comme une nouvelle personne et de leur pays de résidence) et, dans ce scénario nécessité de traduire à partir du pays de chaîne qui est entré dans une forme de valeur entière. Encore une fois, c'est juste un exemple de cas d'utilisation, mais l'objectif reste le même. J'ai besoin d'une table qui peut se traduire dans les deux sens entre une valeur de chaîne et un énumérés int valeur. La chose la plus évidente à faire est de conserver un tableau (pour l'int de la chaîne de traduction) et une carte (pour le string en int la traduction). Je préfère ne pas gérer manuellement les deux variables, puisque c'est sujette à des erreurs. Donc ma solution est ci-dessous afin de maintenir un seul tableau, et ont le constructeur de la méthode de construction automatique de la carte au moment de l'exécution lorsque le programme est exécuté. Ceci a l'avantage de ne pas avoir à parcourir l'ensemble du tableau lorsque je récupère la valeur de nombre entier en fonction de la chaîne (qui est l'autre solution proposée).

  • Ce fil à partir d'un certain retour semble être ce que vous cherchez. stackoverflow.com/questions/8307478/...
  • Je me dis que je pourrait aller avec la 3ème option de maintenir une carte[string]int, et la création du miroir []tableau de chaîne dans l'exécution, de sorte que je ne serais pas aussi sujettes à des erreurs de mise en miroir manuellement, et il sera plus performant que de parcourir le tableau pour déterminer l'indice.