Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检查字典键是否包含_C#_Key_Contains - Fatal编程技术网

C# 检查字典键是否包含

C# 检查字典键是否包含,c#,key,contains,C#,Key,Contains,我必须在字典中存储两个键一个值。所以我就是这样用的 Dictionary<int, Dictionary<int, int>> dicThreatPurgeSummary = new Dictionary<int,Dictionary<int,int>>(); 如果dicThreatPurgeSummary[Group][Month]已经存在,我需要更新它的值。请帮我找出答案。这应该行得通 if(dicThreatPurgeSummary.Con

我必须在字典中存储两个键一个值。所以我就是这样用的

Dictionary<int, Dictionary<int, int>> dicThreatPurgeSummary = new Dictionary<int,Dictionary<int,int>>();
如果dicThreatPurgeSummary[Group][Month]已经存在,我需要更新它的值。请帮我找出答案。

这应该行得通

if(dicThreatPurgeSummary.ContainsKey(Group) &&
   dicThreatPurgeSummary[Group].ContainsKey(Month))
{
    dicThreatPurgeSummary[Group][Month] = NewValue;
}
这应该行得通

if(dicThreatPurgeSummary.ContainsKey(Group) &&
   dicThreatPurgeSummary[Group].ContainsKey(Month))
{
    dicThreatPurgeSummary[Group][Month] = NewValue;
}
您可以使用来检查密钥是否存在,因此您可以这样做:

if (dicThreatPurgeSummary.ContainsKey(Group))
{
    if (dicThreatPurgeSummary[Group].ContainsKey(Month))
    {
        // dicThreatPurgeSummary[Group][Month] exists
    }
}
var dicThreatPurgeSummary = new IntIntDict<int>();
dicThreatPurgeSummary.Add(Group, Month, Count);

// accessing the value
int a = dicThreatPurgeSummary[Group, Month];

// checking for existance
if (dicThreatPurgeSummary.ContainsKey(Group, Month))
{
    // ...
请注意,最好使用二维键,而不是级联两个字典。这样,您就不必在每次为第一级使用新键时都添加一个新字典,而且所有值都在同一个字典中,这样您就可以迭代这些值或检查值是否存在

您可以使用一个:

var dicThreatPurgeSummary = new Dictionary<Tuple<int, int>, int>();
dicThreatPurgeSummary.Add(new Tuple<int, int>(Group, Month), Count);

// accessing the value
int a = dicThreatPurgeSummary[new Tuple<int, int>(Group, Month)];

// checking for existance
if (dicThreatPurgeSummary.ContainsKey(new Tuple<int, int>(Group, Month)))
{
    // ...
}
使用更漂亮的子类型 未经测试

然后你可以这样使用它:

if (dicThreatPurgeSummary.ContainsKey(Group))
{
    if (dicThreatPurgeSummary[Group].ContainsKey(Month))
    {
        // dicThreatPurgeSummary[Group][Month] exists
    }
}
var dicThreatPurgeSummary = new IntIntDict<int>();
dicThreatPurgeSummary.Add(Group, Month, Count);

// accessing the value
int a = dicThreatPurgeSummary[Group, Month];

// checking for existance
if (dicThreatPurgeSummary.ContainsKey(Group, Month))
{
    // ...
}

您可以使用来检查密钥是否存在,因此您可以这样做:

if (dicThreatPurgeSummary.ContainsKey(Group))
{
    if (dicThreatPurgeSummary[Group].ContainsKey(Month))
    {
        // dicThreatPurgeSummary[Group][Month] exists
    }
}
var dicThreatPurgeSummary = new IntIntDict<int>();
dicThreatPurgeSummary.Add(Group, Month, Count);

// accessing the value
int a = dicThreatPurgeSummary[Group, Month];

// checking for existance
if (dicThreatPurgeSummary.ContainsKey(Group, Month))
{
    // ...
请注意,最好使用二维键,而不是级联两个字典。这样,您就不必在每次为第一级使用新键时都添加一个新字典,而且所有值都在同一个字典中,这样您就可以迭代这些值或检查值是否存在

您可以使用一个:

var dicThreatPurgeSummary = new Dictionary<Tuple<int, int>, int>();
dicThreatPurgeSummary.Add(new Tuple<int, int>(Group, Month), Count);

// accessing the value
int a = dicThreatPurgeSummary[new Tuple<int, int>(Group, Month)];

// checking for existance
if (dicThreatPurgeSummary.ContainsKey(new Tuple<int, int>(Group, Month)))
{
    // ...
}
使用更漂亮的子类型 未经测试

然后你可以这样使用它:

if (dicThreatPurgeSummary.ContainsKey(Group))
{
    if (dicThreatPurgeSummary[Group].ContainsKey(Month))
    {
        // dicThreatPurgeSummary[Group][Month] exists
    }
}
var dicThreatPurgeSummary = new IntIntDict<int>();
dicThreatPurgeSummary.Add(Group, Month, Count);

// accessing the value
int a = dicThreatPurgeSummary[Group, Month];

// checking for existance
if (dicThreatPurgeSummary.ContainsKey(Group, Month))
{
    // ...

}

比两次调用ContainsKey和三次字典索引效率略高:

Dictionary<int, int> forGroup;
if (dicThreatPurgeSummary.TryGetValue(Group, out forGroup) &&
    forGroup.ContainsKey(Month))
{
    forGroup[Month] = newValue;
}

比两次调用ContainsKey和三次字典索引效率略高:

Dictionary<int, int> forGroup;
if (dicThreatPurgeSummary.TryGetValue(Group, out forGroup) &&
    forGroup.ContainsKey(Month))
{
    forGroup[Month] = newValue;
}

你试过使用dictionary的TryGetValue方法吗?你试过使用dictionary的TryGetValue方法吗?在某种程度上,使用元组是有意义的,但最终会得到更难看的代码。if dic.ContainsKeyGroup&&dic[Group]。ContainsKeyMonth{…}@juharr您可能可以使用一些实用函数扩展方法,甚至可以创建一个直接包含这些函数的字典子类型,例如ContainsKeyint,int方法。将两个int组合成一个long,甚至一个int,可能比使用元组更好。@Rawling是的,如果您选择子类型,您可以很容易地将这些转换抽象出来。在某种程度上,使用元组是有意义的,但最终会得到更难看的代码。如果dic.ContainsKeyGroup&&dic[Group]。ContainsKeyMonth{…}@juharr您可能可以使用一些实用函数扩展方法,甚至可以创建一个直接包含这些函数的字典子类型,例如ContainsKeyint,int方法。将两个int组合成一个long,甚至一个int,可能比使用元组更好。@Rawling是的,如果您选择子类型,您可以轻松地将这些转换抽象出来。