我有一个类似Link中提到的问题,使用部分密钥从Dictionary
获取数据,而我的密钥DataType
是string
。
这是我的字典的样子
Key Values
GUID1+GUID2+GUID3 1, 2, 3
GUID1+GUID2+GUID3 4, 5, 6
GUID1+GUID2+GUID3 7, 8, 9
但是提供的解决方案是使用Dictionary
中带有linq的扩展方法从Dictionary
获取数据。我只想使用Dictionary
或TryGetValue
或通配符表达式从Regex
提取数据。
答案 0 :(得分:1)
一种更好的方法是使用字典词典:
Dictionary<Tuple<Guid, Guid>, Dictionary<Guid, string>> dictionary;
然后使用扩展方法,以简化使用代码的地方:
public static bool TryGetValue<TKey1, TKey2, TKey3, TValue>(this Dictionary<Tuple<TKey1, TKey2>, Dictionary<TKey3, TValue>> dict, TKey1 key1, TKey2 key2, TKey3 key3, out TValue value)
{
if (dict.TryGetValue(new Tuple<TKey1, TKey2>(key1, key2), out var subDict) && subDict.TryGetValue(key3, out value))
{
return true;
}
value = default(TValue);
return false;
}
public static bool Add<TKey1, TKey2, TKey3, TValue>(this Dictionary<Tuple<TKey1, TKey2>, Dictionary<TKey3, TValue>> dict, TKey1 key1, TKey2 key2, TKey3 key3, TValue value)
{
var mainKey = new Tuple<TKey1, TKey2>(key1, key2);
if (!dict.TryGetValue(mainKey, out var subDict))
{
subDict = new Dictionary<TKey3, TValue>();
dict[mainKey] = subDict;
}
subDict.Add(key3, value);
}
因此,当您将其插入字典时,您将使用如下扩展方法:
dictionary.Add(g1, g2, g3, v1);
然后获取值:
if (dictionary.TryGetValue(g1, g2, g3, out v1))
{
}
当然,外部字典的键由您决定。我只是用Tuple
来说明如何保持强类型化。