首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.NET类,用于根据键快速查找值,反之亦然

.NET类,用于根据键快速查找值,反之亦然
EN

Stack Overflow用户
提问于 2010-09-28 13:45:26
回答 4查看 983关注 0票数 2

我经常使用Dictionary<TKey, TValue>类型来存储ehh...dictionary类型的值,例如Key = 1, Value ="Canada"。但在许多情况下,字典数据中的值也是唯一的,就像键一样。而且我发现对于Dictionary<TKey, TValue>类型,根据值获取键值并不是很方便。

我的问题是,在这种情况下,.NET中的哪个类适合?根据键快速找到值,反之亦然。

EN

Stack Overflow用户

回答已采纳

发布于 2010-09-28 13:56:13

使用LINQ很容易做到这一点:

代码语言:javascript
复制
int key = new Dictionary<int,string>().Where((kv)=>kv.Value == "SomeValue").Select(kv=>kv.Key).FirstOrDefault();

如果您愿意,还可以使用扩展方法:

代码语言:javascript
复制
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),因为键和值都将存储在有序的哈希表中。

票数 4
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3810010

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档