【问题标题】:Unity 3d how heavy is a dictionary?unity 3d 字典有多重?
【发布时间】:2015-09-18 13:20:17
【问题描述】:

每个人都告诉我 List 对性能很重要,所以我想知道字典是否也一样?因为字典没有固定的大小。是否也有一个固定大小的字典,就像一个普通的数组一样?

提前致谢!

【问题讨论】:

标签: dictionary unity3d


【解决方案1】:

列表可能会影响性能,但这取决于您的用例。

如果您的用例是一个非常大的数据集的索引,您计划在运行时搜索其中的元素,那么字典的检索时间复杂度为 O(1)(这很棒!)。

如果您打算在运行时在这里和那里插入/删除一点数据,那没关系。但是,如果您计划在运行时进行持续插入,那么由于散列和冲突处理功能,您将受到性能影响。

如果您的用例需要对连续数据进行大量插入、删除和迭代,那么列表会很快。但是,如果您打算在运行时不断搜索,那么列表可能会在性能方面受到影响。

关于字典和大小:

如果您知道数据集的大小/一般范围,那么您可以在技术上对此进行解释并相应地进行初始化。或者您可以编写自己的字典和哈希表实现。

总而言之:

每种数据结构都有其优点和缺点。因此,请考虑您计划在运行时如何处理数据,然后做出相应选择。

此外,保存数据结构时间和空间复杂度表总是很方便:P

【讨论】:

    【解决方案2】:

    这取决于您的需求。

    如果您只是添加然后以顺序方式迭代列表中的项目 - 这是一个不错的选择。

    如果您对每个项目都有一个密钥并且需要通过密钥快速随机访问 - 使用字典。

    在这两种情况下,您都可以指定集合的​​初始大小以减少内存分配。

    【讨论】:

      【解决方案3】:

      如果集合中有不同数量的项目,您需要使用 list,而不是使用集合中新的项目数量重新创建 array

      使用 dictionary,获取集合中的特定项目会更容易一些,因为您有 key 并且只需要查找它,因此从集合中获取项目时性能会更好一些.

      Listdictionary 是 System.Collections 命名空间的一部分,它们是可变类型。有一个 System.Collections.Immutable namespace,但 Unity 尚不支持它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多