1 回答

TA贡献1796条经验 获得超4个赞
正如您所说,您在数组的值中有一个关联数组¹。
在 C# 中,您将在数组的值或外部字典的值中放置一个字典。更准确地说,如果我们事先知道外部数组的大小,我们可以这样写
var size = 42; // let's assume we know this somehow
var outer = new Dictionary<InnerKey, InnerValue>[size];
for (int i = 0; i < size; i++) {
for (key in some_source) {
var value = some_function(key);
if (outer[i] == null) {
outer[i] = new Dictionary<InnerKey, InnerValue>();
}
outer[i].Add(somekey, somevalue);
}
}
但是,在这种情况下,我们事先并不知道数组的大小,并且在 C# 中动态调整数组的大小会很痛苦,所以我们将使用一个其值本身就是字典的字典:
var outer = new Dictionary<Int, Dictionary<InnerKey, InnerValue>>;
for (int i = 0; i < size; i++) {
for (key in some_source) {
var value = some_function(key);
if (!outer.ContainsKey(i)) {
outer.Add(i, new Dictionary<InnerKey, InnerValue>());
}
outer[i].Add(somekey, somevalue);
}
}
请注意,您还可以使用d[k] = v. 如果键已经存在,d[k] = v将覆盖其值,但d.Add(k, v)会引发异常,因此Add如果您知道键应该是唯一的,那么使用它会更安全。
为了更清晰的代码,以一些稍微复杂的功能为代价,您可以摆脱使用DefaultDictionary. 您也很可能通过使用 LINQ 摆脱循环。它看起来很像带有一些 C# 语法的 SQL,并且能够操作 C# 列表、字典、数组等。您正在使用的 SQL 绑定甚至可能具有 LINQ 接口!
¹ 键不是整数的数组通常称为关联数组(它将值与键相关联)。
- 1 回答
- 0 关注
- 179 浏览
添加回答
举报