[英]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.