【发布时间】:2019-03-10 23:28:25
【问题描述】:
我正在尝试用 C# 打印出一个模拟图形的字典。我的字典是这样的:
Dictionary<int, List<int>> graph = new Dictionary<int, List<int>>();
在 main 中,我在字典中添加了一些内容,然后尝试将其打印出来:
dicOfLists myDic = new dicOfLists();
myDic.AddEdge(1, 2);
myDic.printList();
AddEdge 和 PrintList 方法非常简单:
添加边缘:
public void AddEdge(int v1, int v2)
{
if (graph[v1] == null)
{
graph[v1] = new List<int> { v2 };
return;
}
graph[v1].Add(v2);
}
打印列表:
for (int i = 0; i < 1; i++)
{
Console.WriteLine(graph[i][i]);
}
我没有用 C# 或 Python 做过很多编程,所以字典对我来说是新的。我认为我被绊倒的原因比任何事情都更具概念性,特别是因为我不确定字典中的列表是如何工作的。
我目前的理解方式如下:
在调用Addedge(1, 2) 时,我的字典会在我的字典的1 位置创建一个包含单个元素2 的列表。这是因为第一个参数表示字典的键,第二个参数表示列表。关键功能就像它在哈希表中一样。提供键后,字典会查看该位置,然后创建一个列表。
就像我说的,我是 C# 的新手,所以请不要太用力地歪曲我。虽然这可能像一个简单的语法错误一样微不足道,但我无法在网上找到很多关于这个特定问题的任何东西。任何帮助将不胜感激!
【问题讨论】:
-
尝试用
if (!graph.ContainsKey(v1))替换if (graph[v1] == null) -
@Kevin Gosse 我的错误因此而略有变化。我现在得到“字典中不存在给定键'0'。”在我得到“”字典中不存在给定键“1”之前。”
-
您的
PrintList正在尝试使用键0访问元素 - 但正如错误所示,您从未添加过(您只使用键1添加了一个) -
@UnholySheep 我明白你在说什么,但如果我将电话改为
myDic.AddEdge(0, 1);,我仍然会收到同样的错误。我错过了你说的话吗? -
什么是 dicOfLists?
标签: c# list dictionary exception