【问题标题】:Assigning more than one attribute to an object为一个对象分配多个属性
【发布时间】:2013-11-23 09:46:57
【问题描述】:

在我的游戏中,它的目标是变得有点像吉他英雄,但是我之前也做过这个游戏,但我在解析 XML 时遇到了很多错误。它会是这样的:

<song>
  <note>
    <time>1.35</time>
    <key>A</key>
  </note>
</song>

然后,我将解析 XML 文件中的每个“note”属性并将其分类到包含所有注释的字典中:

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

但是,“狡猾”位出现了,我插入了“时间”属性作为键,因为如果我将“键”属性设置为键,我肯定会出错。我的时间属性纯粹是基于确保时间每次都不同。现在对于我制作的歌曲制作者,这产生了一个问题,我必须对 XML 文件进行排序并删除其中可能存在的任何重复项,现在这很痛苦。

我知道有更好的方法来做这样的事情,但我不确定如何做。是否有人可以向我展示一种更好的做事方式,然后解释如何以及为什么这样做?

非常感谢, 贾罗德。

【问题讨论】:

    标签: c# xml list dictionary xna


    【解决方案1】:

    我不完全理解的第一件事是为什么您将时间值存储为int?我相信TimeSpan 会更好地为您服务。

    关于重复项,您并没有真正检查源文件并手动删除它们。当您尝试在 C# 中向字典添加重复项时,它会抛出 ArgumentException,您可以忽略它。

    现在用于存储数据。我想游戏的流程会和《吉他英雄》中的一样。考虑到这一点,为什么不直接使用List?您是否需要能够根据数据本身从集合中获取数据(Dictionary 提供的功能)?我真的不明白你为什么将数据拆分到更多的字典,如果你能解释一下,也许我会建议你。

    只需创建一个用于存储值对的类(如果有很多输入数据或速度很重要,struct 肯定会更好)并将其存储在List 中。如果您需要拆分,只需循环浏览列表并拆分它。按顺序从集合中获取数据更有意义。

    如果输入数据未排序,您可以使用一些可用的排序集合,但这实际上没有必要。

    最后,在不了解自己真正需要完成的工作的情况下,为您指明正确的方向仍然有点困难。

    【讨论】:

    • 我不会让字典抛出异常,你应该使用 Contains 方法来检测重复。
    • 非常感谢,您的回答很有帮助。抱歉回复晚了。
    猜你喜欢
    • 2022-11-10
    • 2017-09-12
    • 1970-01-01
    • 2014-12-15
    • 1970-01-01
    • 2011-02-17
    • 2019-01-29
    • 1970-01-01
    • 2016-12-09
    相关资源
    最近更新 更多