迭代字典词典

时间:2014-02-07 18:36:57

标签: c# dictionary

目前在解析我为小游戏制作的模板方面做了一些工作。

看起来像这样:

HEADER:NPC
NAME:Goblin
NAMEPLURAL:Goblins
NAMECHILD:Gob'in
NAMECHILDPLURAL:Gob'ins
MOVEMENT0:WALK
MOVEMENT1:RUN
MOVEMENT2:SWIM
BASEHP:30
BASEMANA:0
BASELEVEL:1?9

在我的解析器中,我执行以下操作:

class TemplateParser
{
    public String folder { get; set; }

    public TemplateParser(String folder)
    {
        this.folder = folder;
    }

    public Dictionary<String, Dictionary<String, String>> Parse()
    {
        Dictionary<String, Dictionary<String, String>> parsedTemplates =
            new Dictionary<String, Dictionary<String, String>>();

        String[] files = Directory.GetFiles(folder);
        StreamReader reader;

        foreach (String s in files)
        {
            try
            {
                String line = "";
                reader = new StreamReader(s);
                Dictionary<String, String> attributes = new Dictionary<String, String>();
                while((line = reader.ReadLine()) != null)
                {
                    string[] split = line.Split(':');
                    attributes.Add(split[0], split[1]);
                }
                parsedTemplates.Add(Path.GetFileNameWithoutExtension(s), attributes);
                reader.Close();
            }
            catch (IOException ioe)
            {
                Log.LogMessage(ioe.Message, ELogFlag.CRITICAL);
            }
        }

        return parsedTemplates;
    }
}

现在问题在于:

当我试图浏览这个集合时(在运行Parse()之后)我想做一点测试并写出包含“Goblin”字典中所有信息的字典。

到目前为止,我所有的尝试都是徒劳的,就像我templates["Goblin"]时一样,我希望我能找到一本我可以用foreach()迭代的字典,但它不会让我这样做。它说有关转换不可能的事情。然后我寻找一个枚举器,但我无法让一个枚举器迭代。

我错过了什么?

2 个答案:

答案 0 :(得分:2)

没有看到你打印字典的代码,因为编译器“说了一些关于转换不可能的事情”,看来你的代码没有在你的循环中使用正确的元素类型。

以下是如何迭代字典字典,无论其键类型如何:

var dictOfDictionaries = Parse();
foreach (var dictPair in dictOfDictionaries) {
    Console.WriteLine("Key: {0}", dictPair.Key);
    foreach (var innerPair in dictPair.Value) {
        Console.WriteLine("\t{0}:{1}", innerPair.Key, innerPair.Value);
    }
}

答案 1 :(得分:1)

以下是一个例子:

Dictionary<int,Dicationary<string,char>> lol = new Dictionary<int,Dicationary<string,char>>();
foreach( KeyValuePair<int, Dictionary<string,char>> kvp in lol)
{
    int test = kvp.Key;
    foreach(KeyValuePair<string,char> kvp2 in kvp.Value)
    {
        string s = kvp.Key;
        char c = kvp.Value;
    }
}