繁体   English   中英

遍历字典词典

[英]Iterating through a Dictionary of Dictionaries

目前,在解析我为小型游戏制作的模板时需要做一些工作。

看起来像这样:

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() ),我想做一些测试,并写出包含“地精”字典中所有信息的字典。

到目前为止,我的所有尝试都是徒劳的,因为当我做templates["Goblin"]我希望我会得到一个字典,可以使用foreach()进行迭代,但是它不允许我这样做。 它表示无法进行转换。 然后我改为寻找一个枚举器,但是我无法让一个枚举器遍历任何一个。

我想念什么?

由于编译器“无法进行有关转换的说明”,因此没有看到用于打印字典的代码,因此看来您的代码在循环中使用的元素类型不正确。

无论字典的键类型如何,都可以通过以下方法迭代字典:

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);
    }
}

这是一个例子:

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;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM