将多个键映射到一个值

时间:2019-10-02 23:39:55

标签: c#

我正在尝试将可变长度的键值映射到一个值,并根据所提供的多个键中的任何一个返回值。

例如:

    public const string GetDataCenterUrls = "getDataCenterUrls";
    public const string Get = "get";
    public const string Search = "search";
    public const string Upsert = "upsert";

    public const string value1= "value1";
    public const string value2 = "value2"

    public static readonly Dictionary<string, string> dict = new Dictionary<string, string>
    {
        {GetDataCenterUrls, value1},
        {Get, value2},
        {Search, value2},
        {Upsert, value2},
    };

我想避免这种情况,并且有更多类似内容:

    public static readonly Dictionary<string, string> dict = new Dictionary<string, string>
    {
        {GetDataCenterUrls, value1},
        {Get,Search,Upsert, value2},
    };

并按如下所示返回值:

   dict[GetDataCenterUrls] === value1 //true
   dict[Get] == value2 //true
   dict[Search] == value2 //true

一直在研究使用Ilookup和带有密钥列表的Dictionary,但是仍不确定实现此目的的最佳和最有效方法。

在Reddit上看到了此解决方案,以便向Dictionary添加扩展方法,但不确定是否有更好的方法来实现此目的:

 public static void Add<TKey, TValue>(this Dictionary<TKey, TValue> d, 
 IEnumerable<TKey> keys, TValue value)
{
    foreach (var key in keys) d.Add(key, value);
} 

 var d = new Dictionary<string, string>();
 d.Add(new[] {"key1", "key2", "key3"}, "value");

1 个答案:

答案 0 :(得分:0)

使用字典,它总是将一键映射到一个值。

您提到的扩展方法只是您第一次尝试的简写形式,其中每个键都是单独添加的。您还可以在实例化一个空字典后多次调用Dictionary.Add(item)。

这两种方法在性能上几乎没有什么区别,但是如果您想弄清楚所有这些键都映射到相同的值,则使用扩展方法可能会导致更具表现力的代码。

如果您问是否可以拥有一个这样的Dictionary,其中多个键映射到一个值,则没有问题,并且我不知道更合适的集合。

我要说的是,如果您希望更新Dictionary中的值并希望所有相关的字符串都发生变化,则可能要使用类而不是原始字符串。但是您没有问这个,所以我将不再赘述。