Comme tout le monde l'a dit, il n'y a pas de correspondance entre la valeur et la clé dans un dictionnaire.
Je viens de remarquer que vous vouliez faire correspondre une valeur à plusieurs clés - je laisse cette solution ici pour la version à valeur unique, mais j'ajouterai ensuite une autre réponse pour une carte bidirectionnelle à entrées multiples.
L'approche normale à adopter ici est d'avoir deux dictionnaires - l'un cartographiant dans un sens et l'autre dans l'autre. Encapsulez-les dans une classe séparée, et déterminez ce que vous voulez faire lorsque vous avez une clé ou une valeur en double (par exemple, lancer une exception, écraser l'entrée existante, ou ignorer la nouvelle entrée). Personnellement, j'opterais probablement pour le lancement d'une exception - cela rend le comportement de réussite plus facile à définir. Quelque chose comme ceci :
using System;
using System.Collections.Generic;
class BiDictionary<TFirst, TSecond>
{
IDictionary<TFirst, TSecond> firstToSecond = new Dictionary<TFirst, TSecond>();
IDictionary<TSecond, TFirst> secondToFirst = new Dictionary<TSecond, TFirst>();
public void Add(TFirst first, TSecond second)
{
if (firstToSecond.ContainsKey(first) ||
secondToFirst.ContainsKey(second))
{
throw new ArgumentException("Duplicate first or second");
}
firstToSecond.Add(first, second);
secondToFirst.Add(second, first);
}
public bool TryGetByFirst(TFirst first, out TSecond second)
{
return firstToSecond.TryGetValue(first, out second);
}
public bool TryGetBySecond(TSecond second, out TFirst first)
{
return secondToFirst.TryGetValue(second, out first);
}
}
class Test
{
static void Main()
{
BiDictionary<int, string> greek = new BiDictionary<int, string>();
greek.Add(1, "Alpha");
greek.Add(2, "Beta");
int x;
greek.TryGetBySecond("Beta", out x);
Console.WriteLine(x);
}
}
1 votes
Pourquoi le type de retour
int[]
alors que vous attendez une seule valeur ?3 votes
@Anar, lisez ma réponse à Domenic ; "Les valeurs en double sont peu probables mais pas impossibles".
0 votes
la clé d'une valeur ? Je pense que vous voulez dire les clés