我正在尝试将可变长度的键值映射到一个值,并根据所提供的多个键中的任何一个返回值。
例如:
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");
答案 0 :(得分:0)
使用字典,它总是将一键映射到一个值。
您提到的扩展方法只是您第一次尝试的简写形式,其中每个键都是单独添加的。您还可以在实例化一个空字典后多次调用Dictionary.Add(item)。
这两种方法在性能上几乎没有什么区别,但是如果您想弄清楚所有这些键都映射到相同的值,则使用扩展方法可能会导致更具表现力的代码。
如果您问是否可以拥有一个这样的Dictionary,其中多个键映射到一个值,则没有问题,并且我不知道更合适的集合。
我要说的是,如果您希望更新Dictionary中的值并希望所有相关的字符串都发生变化,则可能要使用类而不是原始字符串。但是您没有问这个,所以我将不再赘述。