为了账号安全,请及时绑定邮箱和手机立即绑定

按值获取字典键

按值获取字典键

C#
扬帆大鱼 2019-11-05 16:18:46
如何在C#中按值获取字典键?Dictionary<string, string> types = new Dictionary<string, string>(){            {"1", "one"},            {"2", "two"},            {"3", "three"}};我想要这样的东西:getByValueKey(string value);getByValueKey("one")必须返回"1"。最好的方法是什么?也许HashTable,SortedLists?
查看完整描述

3 回答

?
万千封印

TA贡献1891条经验 获得超3个赞

您可以这样做:

  1. 通过遍历KeyValuePair<TKey, TValue>字典中的所有数字(如果您在字典中有许多条目,这将对性能产生很大的影响)

  2. 使用两个字典,一个用于值到键的映射,另一个用于键到值的映射(这将占用内存的两倍)。

如果不考虑性能,则使用方法1;如果不考虑内存,则使用方法2。

同样,所有键都必须是唯一的,但是值不必是唯一的。您可能有多个具有指定值的键。

有什么原因不能扭转键值关系?


查看完整回答
反对 回复 2019-11-05
?
繁华开满天机

TA贡献1816条经验 获得超4个赞

我处于无法使用Linq绑定并且必须显式扩展lambda的情况。它产生了一个简单的功能:


public static T KeyByValue<T, W>(this Dictionary<T, W> dict, W val)

{

    T key = default;

    foreach (KeyValuePair<T, W> pair in dict)

    {

        if (EqualityComparer<W>.Default.Equals(pair.Value, val))

        {

            key = pair.Key;

            break;

        }

    }

    return key;

}

如下调用:


public static void Main()

{

    Dictionary<string, string> dict = new Dictionary<string, string>()

    {

        {"1", "one"},

        {"2", "two"},

        {"3", "three"}

    };


    string key = KeyByValue(dict, "two");       

    Console.WriteLine("Key: " + key);

}

适用于.NET 2.0和其他受限环境。


查看完整回答
反对 回复 2019-11-05
  • 3 回答
  • 0 关注
  • 460 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信