使用foreach循环将值添加到字典中

时间:2018-11-30 15:06:05

标签: c# dictionary foreach console-application

我正在尝试生成一个图形,该图形使用起点和dictionary逐一添加点,在执行路径查找算法之前,字典为dictionary<int, int>的形式。我想基于分别由intcaveConnections组成的两个connectionWeights值列表来填充字典。该点可以具有多个连接,因此需要循环来添加值。

添加到字典中的第一个int正在从文本文件中逐行读取。第二个int值将从stack中添加。

我不确定如何实现这一目标。我正在尝试实现的输出如下;

Graph g = new Graph();
g.add_vertex(1, new Dictionary<int, int>() {{2, 7}, {3, 8}});
g.add_vertex(2, new Dictionary<int, int>() {{1, 7}, {6, 2}});
g.add_vertex(3, new Dictionary<int, int>() {{1, 8}, {6, 6}, {7, 4}});
g.add_vertex(4, new Dictionary<int, int>() {{6, 8}});
g.add_vertex(5, new Dictionary<int, int>() {{8, 1}});
g.add_vertex(6, new Dictionary<int, int>() {{2, 2}, {3, 6}, {4, 8}, {7, 9}, {8, 3}});
g.add_vertex(7, new Dictionary<int, int>() {{3, 4}, {6, 9}});
g.add_vertex(8, new Dictionary<int, int>() {{5, 1}, {6, 3}});

文本文件内容;

4 
4 5 
5 6 7 
1 5 6 
2 3 4 
3 4 
3 

堆栈构建如下;

Stack<String> connectionStack = new Stack<string>();
List<int> connectionData = new List<int>();
foreach (String s in caveConnections)
{
    connectionStack.Push(s);
}

堆栈内容;

  

2,8,3,2,14,5,7,6,11,2,11,6,14,1

任何建议将不胜感激。

1 个答案:

答案 0 :(得分:1)

string[] lines = File.ReadAllLines("ints.txt");
Graph g = new Graph();
for(int i =0; i< lines.Liength; i++)
{
     string[] ints = lines[i].Split(' ');
     Dictionary<int, int> dict = new Dictionary<int, int>();
     for(int j = 0; j<ints.Length;j++)
        if(!dict.ContainsKey(int.Parse(ints[i].Trim())))
            dict.Add(int.Parse(ints[i].Trim()), int.Parse(connectionStack.Pop()));
     g.add_vertex(i+1, dict);
}

当然,如果堆栈计数少于文本文件中的整数,则将出现异常。