在我的游戏中,它的目标是变得有点像吉他英雄,但是之前我确实制作了游戏,并且在解析XML时遇到了许多错误。它会读到这样的东西:
<song>
<note>
<time>1.35</time>
<key>A</key>
</note>
</song>
从那里开始,我会解析每个&#34;注意&#34; XML文件中的属性并将其排序为包含所有注释的字典:
public Dictionary<int, string> AssortedNotes = new Dictionary<int, string>();
然后从那里开始,我运行一个简单的ForEach语句,并根据值将其分类为子类别的词典,例如:
public Dictionary<int, string> ANotes = new Dictionary<int, string>();
public Dictionary<int, string> SNotes = new Dictionary<int, string>();
public Dictionary<int, string> DNotes = new Dictionary<int, string>();
public Dictionary<int, string> JNotes = new Dictionary<int, string>();
public Dictionary<int, string> KNotes = new Dictionary<int, string>();
public Dictionary<int, string> LNotes = new Dictionary<int, string>();
然而,这里出现了狡猾的&#39;我插入了&#39;时间&#39;属性为关键,因为如果我设置了&#39;键&#39;属性作为键,我肯定会得到错误。我的时间属性完全基于确保时间每次都不同。现在有了我制作的歌曲制作者,这就产生了一个问题,我必须对XML文件进行排序并删除可能存在的任何副本,现在这很痛苦。
我知道有更好的方法来做这样的事情,但我不确定如何做。请有人能够向我展示一种更好的做事方式,然后解释这样做的原因和原因吗?
非常感谢, 贾罗德。
答案 0 :(得分:1)
我不完全理解的第一件事是你为什么将时间值存储为int
?我相信TimeSpan
会更好地为你服务。
关于重复项,您没有真正浏览源文件并手动删除它们。当您尝试在C#中向字典添加副本时,它将抛出ArgumentException
,您可以忽略它。
现在用于存储数据。我想,游戏的流程会像吉他英雄一样。考虑到这一点,为什么不只使用List
?您是否需要能够根据数据本身(Dictionary
提供的功能)从集合中获取数据?我真的不明白为什么你把数据分成更多的词典,如果你能解释一下,也许我会建议你。
只需创建一个用于存储值对的类(如果存在许多输入数据或速度很重要,结构肯定会更好)并将其存储在List
中。如果您需要拆分,只需在列表中循环并拆分即可。从订单中的集合中获取数据更有意义。
如果未订购输入数据,您可以使用一些可用的已排序集合,但这实际上不是必需的。
最后,指向正确的方向仍然有点难以理解你真正需要完成的事情。