将多个键映射到一个值

问题描述 投票:0回答:1

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

例如:

    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");
c#
1个回答
0
投票

有了字典,它总是将一键映射到一个值。

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.