Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 什么可以用作双面资源词典?_C#_Resourcedictionary - Fatal编程技术网

C# 什么可以用作双面资源词典?

C# 什么可以用作双面资源词典?,c#,resourcedictionary,C#,Resourcedictionary,我正在使用ResourceDictionary,但我希望能够使用其他项查找值或键。每个都是唯一的,所以这不是问题。是否有一种类型具有这种双面查找功能?不是内置的,但这很容易编写。我可能会为此实现IDictionary。。。然后将ResourceDictionary转储到自定义类型中 public class DoubleLookup<TKey, TValue> { private IDictionary<TKey, TValue> keys; private ID

我正在使用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];
  }


}
公共类双查找
{
私钥;
私人词典价值观;
//东西。。。
公共无效添加(TKey键,TValue值)
{
this.keys.Add(key,value);
this.values.Add(value,key);
}
公钥GetKeyFromValue(TValue值)
{
返回这个.values[value];
}
公共TValue GetValueFromKey(TKey)
{
返回这个。键[key];
}
}

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

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

在我自己的个人代码库中(用Java编写,这已经足够接近了),我有用于这类事情的MultiMap类。虽然键是唯一的,但每个键都可以与多个值关联。它与Map>完全相同

当我需要在集合中执行值到键的查找时,我会执行以下操作:

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

V value = ...;
if (reverseLookupTable.containsKey(value)) {
   Set<K> keys = reverseLookupTable.get(value);
}
Map lookupTable=。。。;
MultiMap reverseLookupTable=MapUtil.invert(lookupTable);
V值=。。。;
if(反向可查阅。容器(值)){
Set keys=reverseLookupTable.get(值);
}
如果使用MultiMap以外的内容(如HashMap或Dictionary)作为反向查找表,则可能会丢失一些V->K映射,除非可以保证集合中的所有键和值都是唯一的


编辑:

哎呀。我刚刚注意到你说你的收藏中的所有键和值都是独一无二的。但无论如何,我会把我的答案留在这里,作为对其他阅读本文的人的警告,他们可能无法提供同样的保证