我经常使用Dictionary<TKey, TValue>类型来存储ehh...dictionary类型的值,例如Key = 1, Value ="Canada"。但在许多情况下,字典数据中的值也是唯一的,就像键一样。而且我发现对于Dictionary<TKey, TValue>类型,根据值获取键值并不是很方便。
我的问题是,在这种情况下,.NET中的哪个类适合?根据键快速找到值,反之亦然。
发布于 2010-09-28 13:56:13
使用LINQ很容易做到这一点:
int key = new Dictionary<int,string>().Where((kv)=>kv.Value == "SomeValue").Select(kv=>kv.Key).FirstOrDefault();如果您愿意,还可以使用扩展方法:
static class DictionaryExtensions {
public static bool TryFindByValue<TKey, TValue>(this IDictionary<TKey, TValue> dict, TValue value, out TKey key) {
var keys = dict.Where((kv) => kv.Value.Equals(value)).Select(kv => kv.Key);
bool retValue = keys.Any();
key = keys.FirstOrDefault();
return retValue;
}
}您还可以实现IDictionary,委托给两个Dictionary对象(一个用于键-值映射,另一个用于值-键映射)用于后备存储,并对Add有一个约束,即值必须是唯一的。这样就可以保证最多只有一个条目具有特定值。使用两个字典编辑将缩短访问时间(感谢@SamStephens),因为键和值都将存储在有序的哈希表中。
https://stackoverflow.com/questions/3810010
复制相似问题