Frage

Ich bin mit einem Resource, aber ich möchte in der Lage sein, den Wert oder die Taste mit dem anderen Elemente zu suchen. Jeder ist immer einzigartig, so ist das kein Problem. Gibt es eine Art, die diese doppelseitige Lookup-Funktion hat?

War es hilfreich?

Lösung

Nicht eingebaut, aber das ist ziemlich einfach zu schreiben. Ich würde wahrscheinlich IDictionary für diese Umsetzung aber ... Sie würden dann die Resource in Ihre benutzerdefinierten Typ-Dump.

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];
  }


}

Andere Tipps

Seien Sie sehr vorsichtig, wenn Sie den Schlüssel / Wert-Verhältnis in einem Wörterbuch rückgängig zu machen.

Der Vertrag der Wörterbuch garantiert, dass für jeden Wert in der Sammlung, genau ein Schlüssel ist, der diesen Wert zuordnet. Die Schlüssel sind einzigartig. Aber das Gegenteil ist nicht wahr; für jeden eindeutigen Wert, kann es viele verschiedene Schlüssel-Mapping auf diesen Wert sein.

In meiner eigenen persönlichen Code-Bibliothek (in Java geschrieben, die nahe genug ist), habe ich MultiMap Klasse für genau diese Art der Sache. Obwohl die Schlüssel eindeutig sind, kann jede Taste mit mehreren Werten zugeordnet werden. Es ist genau identisch mit einer Karte>.

Wenn ich Wert-to-Schlüssel-Lookups in einer Sammlung ausführen müssen, kann ich so etwas wie folgt aus:

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

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

Wenn Sie etwas anderes als ein MultiMap (wie eine HashMap oder Wörterbuch) als Reverse-Lookup-Tabelle zu verwenden, führen Sie das Risiko von einigen Ihrer V-> K-Zuordnungen zu verlieren, es sei denn, Sie garantieren können, dass alle Schlüssel und alle Werte in Ihrer Sammlung ist einzigartig.


EDIT:

Oops. Ich habe gerade bemerkt, dass Sie sagten, dass alle Schlüssel und Werte in Ihrer Sammlung einzigartig sind. Aber ich werde meine Antwort hier lassen jedenfalls, als Warnung für andere dies lesen, die nicht die gleiche Garantie liefern können.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top