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是的,如果您选择子类型,您可以轻松地将这些转换抽象出来。