字典中的正则表达式或通配符。

时间:2018-06-29 07:10:43

标签: c# .net dictionary

我有一个类似Link中提到的问题,使用部分密钥从Dictionary获取数据,而我的密钥DataTypestring

这是我的字典的样子

Key                                   Values  
GUID1+GUID2+GUID3                     1, 2, 3
GUID1+GUID2+GUID3                     4, 5, 6
GUID1+GUID2+GUID3                     7, 8, 9

但是提供的解决方案是使用Dictionary中带有linq的扩展方法从Dictionary获取数据。我只想使用DictionaryTryGetValue或通配符表达式从Regex提取数据。

1 个答案:

答案 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来说明如何保持强类型化。