【问题标题】:Is it bad to include the "name" of an object in a map?在地图中包含对象的“名称”是否不好?
【发布时间】:2011-08-09 03:22:31
【问题描述】:

当您拥有诸如人、街道、爱尔兰舞蹈团等具有某种名称标识符的对象集合时,是否可以将其存储在地图中,或者认为这是一种不好的做法,我应该只存储它作为一个列表并每次都查询该列表?

例如。

class Person:
    def __init__(self,name,age):
        self.name=name
        self.age=age
a = [Person("karl",50),Person("abe",20)]
vs
b = {"karl" : Person("karl",50), "abe" : Person("abe",20)}

编辑: 假设唯一性,可能会担心速度问题,但目标是总体清晰。

【问题讨论】:

  • 这取决于。名称是否保证是唯一的?您是否经常按姓名查找人员?
  • 地图是一个抽象概念。如果您按名称或使用其他类型的键查找事物,那么您就有一个映射(或一个多映射,如果键不是唯一的)。您可以使用列表来实现地图概念,这很简单但效率很低。或者您可以使用您的语言/库附带的高效现成地图实现(这是您通常应该做的,除非您有充分的理由不这样做)。
  • 为什么要使用列表而不是地图?搜索列表究竟如何提高清晰度?
  • 我不是说它是,我是在问什么会更清楚

标签: language-agnostic


【解决方案1】:

我认为这是相当冒险的,尤其是当您处理多种编码时,例如可以用罗马字母书写的名称以及其他字符集(例如日语、俄语等)。

此外,正如@cdhowie 所提到的,唯一性的概念非常重要。如果使用了别名,哪一个是规范的?

最后,您将如何处理更改,例如纠正拼写错误?

我没有看到太多好处,而且我认为未来使用存在很多风险。

【讨论】:

    【解决方案2】:

    地图为您提供了恒定的查找时间(好),但您正在复制数据(坏)。如果出于性能原因确实需要恒定的查找时间,请使用映射,但要小心保持键与对象中的值同步。如果它对性能不重要,那么只需将它们保存在一个数组中。

    【讨论】:

      猜你喜欢
      • 2020-05-05
      • 2012-04-20
      • 2013-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多