我正在使用ResourceDictionary,但我希望能够使用其他项目查找值或键。每个都是独一无二的,所以这不是问题。是否有具有此双面查找功能的类型?

有帮助吗?

解决方案

没有内置,但这很容易写。我可能会为此实现IDictionary ...然后您将ResourceDictionary转储到您的自定义类型。

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


}

其他提示

在字典中反转键/值关系时要非常小心。

字典的合同保证,对于集合中的每个值,只有一个键映射到该值。钥匙是独一无二的。但事实恰恰相反;对于每个不同的值,可以有许多不同的键映射到该值。

在我自己的个人代码库(用Java编写,足够接近)中,我有MultiMap类就可以了。虽然键是唯一的,但每个键可以与多个值相关联。它与Map <!> gt;。

完全相同

当我需要在集合中执行value-to-key查找时,我会这样做:

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

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

如果您使用MultiMap之外的其他内容(如HashMap或Dictionary)作为反向查找表,则可能会丢失一些V - <!> gt; K映射,除非您能保证全部密钥和集合中的所有值都是唯一的。


编辑:

糟糕。我刚刚注意到你说你的收藏中的所有键和值都是唯一的。但无论如何,我会在这里留下我的答案,作为对其他人的警告,他们可能无法提供相同的保证。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top