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.
Vous devez vous connecter pour publier un commentaire.
Dans les deux cas, vous devez simplement utiliser le construit en fonction range.
Vous pouvez construire des fonctions d'assistance ou ce que vous voulez sur le dessus de cela, mais
range
est fondamentalement le mécanisme disponible pour accéder à ces données. Si vous voulez un "indexof" fonction il seraitPour obtenir la valeur, bien sûr, vous voudrais juste faire
MyArray[i]
y compris une vérification de limites ou de quoi que ce soit. Note le pseudo-code ci-dessus est écrit dans un style qui indique c'est un tableau, mais pratiquement le même code fonctionne pour une carte, je voudrais juste typiquement le var nomk
au lieu dei
.Suppose que vous voulez obtenir de l'indice de mot dans les données de la matrice de
de longueur fixe ou tableau
créer la fonction
pour obtenir la valeur de la fonction ci-dessus, en fonction du type, de transmettre le tableau avec
array[:]
comme ci-dessous(int)
parenthèses ne sont pas nécessaires. Webstorm met en garde contre 'Reduntant parenthèses'Voici une solution que je l'ai mentionné plus tôt, ce qui fonctionne bien pour la statique des tranches (ce qui est mon cas d'utilisation). Une itération sur la tranche chaque fois que je veux l'indice d'une valeur ajoute les retards inutiles, surtout depuis que mes données sont statiques au cours de l'exécution. Cela crée une structure qui initialise la tranche et crée le correspondant inverse de la carte. Et puis je voudrais utiliser le GetKey et GetVal méthodes pour obtenir la chaîne de caractères " clé "en fournissant l'int "valeur", ou obtenir de l'int "valeur" en fournissant la chaîne 'clé'. Peut-être il y a déjà un moyen pour obtenir la clé d'une valeur particulière d'une carte en Aller.