我必须在词典中存储两个关键的一个值。所以我这样使用。
Dictionary<int, Dictionary<int, int>> dicThreatPurgeSummary = new Dictionary<int,Dictionary<int,int>>();
我添加了密钥,密钥和值。
Dictionary<int, int> innerdict = new Dictionary<int,int>();
innerdict.Add(Month, Count);
dicThreatPurgeSummary.Add(Group, innerdict);
我能够像这样查看价值
int a = dicThreatPurgeSummary[Group][Month];
如果已存在,我需要更新dicThreatPurgeSummary [Group] [Month]的值。请帮我看看。
答案 0 :(得分:4)
比两次调用ContainsKey
和三个字典索引的效率稍高一些:
Dictionary<int, int> forGroup;
if (dicThreatPurgeSummary.TryGetValue(Group, out forGroup) &&
forGroup.ContainsKey(Month))
{
forGroup[Month] = newValue;
}
答案 1 :(得分:3)
这应该有效
if(dicThreatPurgeSummary.ContainsKey(Group) &&
dicThreatPurgeSummary[Group].ContainsKey(Month))
{
dicThreatPurgeSummary[Group][Month] = NewValue;
}
答案 2 :(得分:0)
您可以使用Dictionary<>.ContainsKey检查密钥是否存在,因此您可以这样做:
if (dicThreatPurgeSummary.ContainsKey(Group))
{
if (dicThreatPurgeSummary[Group].ContainsKey(Month))
{
// dicThreatPurgeSummary[Group][Month] exists
}
}
请注意,使用二维键而不是级联两个词典可能会更好。这样,每次使用第一级的新键时,您都不需要关心添加新的字典,并且您将在同一个字典中拥有所有值,允许您迭代值或检查存在的值。
您可以使用tuple:
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)))
{
// ...
}
(未测试的)
class IntIntDict<T> : Dictionary<Tuple<int, int>, T>
{
public T this[int index1, int index2]
{ get { return this[new Tuple(index1, index2)]; } }
public bool ContainsKey (int index1, int index2)
{
return ContainsKey(new Tuple(index1, index2));
}
public void Add (int index1, int index2, T value)
{
Add(new Tuple(index1, index2), value);
}
// ...
}
然后你可以像这样使用它:
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))
{
// ...
}
答案 3 :(得分:0)
Dictionary<int, int> innerDic = null;
bool isGroupPresent = dicThreatPurgeSummary.TryGetValue(Group, out innerDic);
if(isGroupPresent == false)
{
//No entry for Group.
}
else
{
int count;
bool isMonthPresent = innerDic.TryGetValue(Month, out count);
//Same as above
}