【问题标题】:Choose between List or Dictionary在列表或字典之间选择
【发布时间】:2012-07-30 14:47:48
【问题描述】:

我的 .NET 应用程序适用于用户集合。用户对象包含用户名、全名、域......

我想知道我应该更喜欢哪种类型的集合来存储用户,介于 1) 列表或 2) 字典之间,其中字典键是用户名。

我知道字典选项在必须从用户名中检索用户时最快,但由于用户名被引用两次,因此可能会出现一致性错误。 (作为字典键和用户属性)? 你能从设计的角度解释一下有什么不同吗?

【问题讨论】:

标签: c# collections


【解决方案1】:

如果您通常通过 UserName 寻找用户,那么一定要使用 Dictionary。使用列表,您必须“寻找”正确的方式! 至于一致性,我会实现一个 Manager 类,它是唯一允许操作字典的类,从而强制一致性。 在许多会员引擎中,用户名无法更改。这对您的解决方案有帮助吗?

【讨论】:

    【解决方案2】:

    从设计的角度来看,最好的方法是创建一个自定义类 UserCollection 并隐藏实际的存储细节。这使您能够从 List 更改为 Dictionary 而不会影响其他代码。假设它是一个额外的抽象层。

    List 和 Dictionary 之间的区别是概念性的。简单规则 - 如果项目是唯一的并且您需要 O(c) 搜索复杂度,则使用字典,否则使用列表。

    【讨论】:

      【解决方案3】:

      这取决于要求,我认为对于较小的列表,性能差异可以忽略不计,考虑到一致性,使用 List 应该是首选方法,您可以进行类似的查询。

      var user = Users.SingleOrDefault(user => user.username == 'username')
      

      【讨论】:

        【解决方案4】:

        我更喜欢对象列表,尤其是当数据存储在数据库中时。能够查询数据源并返回列表非常有帮助。当数据被顺序访问时,例如使用数据网格,它也是首选。

        我希望这会有所帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-01-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-05-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多