Question

J'utilise un ResourceDictionary, mais j'aimerais pouvoir rechercher la valeur ou la clé avec l'autre élément. Chacun est toujours unique, donc ce n'est pas un problème. Existe-t-il un type doté de cette fonctionnalité de recherche double face?

Était-ce utile?

La solution

Pas intégré, mais c'est assez facile à écrire. Je mettrais probablement en œuvre IDictionary pour cela cependant ... Vous voudriez alors vider le ResourceDictionary dans votre type personnalisé.

public class DoubleLookup<TKey, TValue>
{
  private IDictionary<TKey, TValue> keys;
  private IDictionary<TValue, TKey> values;

  //stuff...

  public void Add(TKey key, TValue value)
  {
    this.keys.Add(key, value);
    this.values.Add(value, key);
  }

  public TKey GetKeyFromValue(TValue value)
  {
    return this.values[value];
  }

  public TValue GetValueFromKey(TKey key)
  {
    return this.keys[key];
  }


}

Autres conseils

Faites très attention lorsque vous inversez la relation clé / valeur dans un dictionnaire.

Le contrat du dictionnaire garantit que, pour chaque valeur de la collection, il existe exactement une clé qui correspond à cette valeur. Les clés sont uniques. Mais l'inverse n'est pas vrai; pour chaque valeur distincte, il peut exister de nombreuses clés différentes mappées sur cette valeur.

Dans ma propre bibliothèque de code personnelle (écrite en Java, ce qui est assez proche), j'ai une classe MultiMap pour ce genre de choses. Bien que les clés soient uniques, chaque clé peut être associée à plusieurs valeurs. Il est exactement identique à une carte >.

Lorsque je dois effectuer des recherches de valeur dans une collection, je fais quelque chose comme ceci:

Map<K, V> lookupTable = ...;
MultiMap<V, K> reverseLookupTable = MapUtil.invert(lookupTable);

V value = ...;
if (reverseLookupTable.containsKey(value)) {
   Set<K> keys = reverseLookupTable.get(value);
}

Si vous utilisez autre chose qu'une carte multiple (comme une table de hachage ou un dictionnaire) comme table de recherche inversée, vous courez le risque de perdre une partie de vos mappages V> K, sauf si vous pouvez garantir que toutes les clés ET toutes les les valeurs de votre collection sont uniques.

EDIT:

Oups. Je viens de remarquer que vous avez dit que toutes les clés et les valeurs de votre collection sont uniques. Mais je laisserai ma réponse ici de toute façon, un avertissement pour ceux qui liront ceci, qui pourraient ne pas être en mesure de fournir la même garantie.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top