【发布时间】:2011-06-25 20:40:04
【问题描述】:
假设我的字典需要使用 ItemId 和 RegionId 的组合作为键,两者都是 int。并说价值侧的类型是“数据”。 我可以通过以下几种方式做到这一点:
方式一:多级字典,像这样:
Dictionary<int, Dictionary<int, Data>> myData;
所以查询可以这样编码:
Data data1 = myData[itemId][regionId];
不错,但缺点是我需要在第一级检查密钥是否存在,所以更安全的代码会是
Data data1 = null;
if (myData.ContainsKey(itemId)) data1 = myData[itemId][regionId];
方式2:使用多部分密钥。 在这种方法中,我将创建一个结构来表示各个部分,并使用一个结构作为字典键:
private struct MultiPartKey
{
public int ItemId;
public int RegionId;
}
Dictionary<MultiPartKey, Data> myData;
查找如下:
MultiPartKey mpk;
mpk.ItemId = itemId;
mpk.RegionId = regionId;
Data data1 = myData[mpk];
这里的一个可能的缺点是它仅在我的结构完全由简单值类型组成时才有效,因此两个实例的按位比较将相等。 (对吧?)
你怎么看?
【问题讨论】:
-
您的密钥类应覆盖
Equals和GetHashCode以允许比较。 msdn.microsoft.com/en-us/library/kw5aaea4%28VS.80%29.aspx
标签: c# .net dictionary key