将文本文件转换为图形

时间:2015-12-04 18:42:59

标签: c# dictionary graph text-files

我试图将文本文件转换为图形,但是当我尝试使用values函数(下面)打印字典中的值时,它会打印类似于" System.Collections.Generic.List的内容。 ' 1 [System.String]"!有人能告诉我代码中的错误吗?! This is the format of the text file

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.IO;


namespace Demo
{

public class Graph
{
    Dictionary<string, List<string>> st;
    static int count;
    static int count1;


    public Graph()
    {
        st = new Dictionary<string, List<string>>();
    }
    public Graph(string filename, string delimeter)
    {
        st = new Dictionary<string, List<string>>();

        FileStream fs = new FileStream(filename, FileMode.Open);

        StreamReader sr = new StreamReader(fs);


        while(sr.Peek()!=-1)
        {
            string line = sr.ReadLine();
            char r;
            r = Convert.ToChar(delimeter);

            string [] names = line.Split(r);               

            for(int i=1;i<names.Length;i++)
            {
                addEdge(names[1], names[i]);

            }

        }

        sr.Close();
    }

    public void addEdge(string a, string b)  
    {
        if(!st.ContainsKey(a))
        {
            addVertex(a);
        }
        if(!st.ContainsKey(b))
        {
            addVertex(b);
        }
        st[a].Add(b);
        st[b].Add(a);
        count1++;   


    }

    public void addVertex(string v)
    {
        isContainV(v);
        st.Add(v, new List<string>());
        count++;
    }
    public int vertexcount()
    {
        return count;
    }
    public int edgeCount()
    {
        return count1;
    }
    public void edge()
    {
        foreach (string key in st.Keys)
        {
            Console.WriteLine(key);
        }
    }
    public void values()
    {
        foreach (List<string> temp in st.Values)
        {
            Console.WriteLine(temp);
        }
    }
    public bool isContainV(string v)
    {
        if(!st.ContainsKey(v))
        {
            return false;
        }
        return true;
    }
    public IEnumerable<string> adjacentTo(string v)
    {
        return st[v];
    }

}
}

1 个答案:

答案 0 :(得分:1)

你不能写一个字符串集合,你需要添加另一个循环来写每个字符串。

    foreach (List<string> temp in st.Value)
    {
       foreach (string s in temp)
       {
          Console.WriteLine(s);
       }
    }

如果你想为整个词典设置一个循环,试试这个......

    foreach (KeyValuePair<string, List<string>> entry in st)
    {
       Console.WriteLine(entry.Key);

       foreach (string s in entry.Value)
       {
           Console.WriteLine(s);
       }
    }