【问题标题】:Better name for dictionaries [closed]更好的字典名称[关闭]
【发布时间】:2009-09-19 07:41:35
【问题描述】:

我正在设计一种编程语言,所以我一直在思考基本类型的命名方式。

“字典”对于字典的作用来说似乎是个坏名字。它们不是带有定义的有组织的单词列表;它们不处理单词,不处理定义,也不是列表。他们与“字典”一词的唯一模糊关联是,人们执行“查找”就像使用纸质字典一样(这也是称它们为“电话簿”的一个很好的论据)。

“HashTable”描述了一个可能会改变的实现。

“关联数组”(来自 JavaScript)得到分数,因为“关联”是一个很好的形容词,因为“数组”也描述了一个实现,更糟糕的是,它描述不准确。

“键/值对集”似乎最准确,但它太长而无用(您真的想每次都输入“KeyValuePairSet”吗?)。

如果我们将“键/值对”称为“关联”,我们将得到“关联集”。这对我来说是最好的,但还没有成为正确的答案;它仍然很长,“设置”仍然感觉有点不对劲。 “AssociationList”更糟(“list”意味着排序,它不存在)。我简要地考虑了“关联”,但这听起来更像是我会命名一个实例而不是类。 “RelationSet”和“PairSet”更短,但描述性较差(两者都没有捕捉到它是一种单向关系键到值的事实;值到键在字典的上下文中没有意义)。

你有什么想法给字典取个更好的名字吗?

【问题讨论】:

    标签: dictionary naming


    【解决方案1】:

    “地图”?

    您将一个值映射到另一个值。

    【讨论】:

    • 这是我的另一个想法 :-)
    • 是的,我也会投票给“map”——除非你打算用你的语言实现任何类型的功能特性,“map”已经有了明确的含义在那个空间。但是,您可能想要像 Haskell 一样拥有 map 函数和 Data.Map 类型。
    • 是的,这很不错。我之前想到了“HashMap”,但由于与“HashTable”相同的问题而放弃了这个想法,但我从未考虑过将“Map”分离出来。尽管如此,地图也有其自身的问题(它会让人联想到制图),但我认为这是迄今为止最好的解决方案。
    • @Daniel Ouch,这是个问题……
    • Imagist:一切都是映射。类文件是方法和属性到类的映射。无论我使用哪种语言,我都将这个东西称为“HashMap”,而且我会一直这样称呼它,直到我死去。这里真的没有决定;称它为 HashMap 并完成。它与实现有关,但这就是重点
    【解决方案2】:

    字典是标准的计算机科学术语。抱怨现实世界的字典与抽象数据类型不同,就像抱怨“heap”实际上并不是一堆杂乱无章的东西,或者“queue”不涉及等待的人排队买票。许多/大多数计算机科学术语都是类比。

    也就是说,另外两个合理的术语是“映射”(因为它是从键到值的映射)和“表”(因此,“哈希表”,一个用哈希实现的表)。

    Java 实际上使用术语“map”(以及“dictionary”——Map 是后来添加的,当时他们意识到字典应该是一个接口,但由于已经使用了这个名称,所以他们不得不提出使用新名称。)

    “表格”的缺点是容易与the database term混淆。

    【讨论】:

      【解决方案3】:

      他们唯一的模糊联系 用“字典”这个词是那个 执行“查找”,就像一个人一样 用纸质字典(如 打电话给他们很好的论据 “电话簿”)。

      查找怎么样?

      【讨论】:

        【解决方案4】:

        map和hash还有别的意思,有点糊。

        我正在努力思考在现实生活中你会如何称呼这样的事情。假设您有一百万部电影要进行键控和组织。您可以通过在目录数据库中查找特定电影的位置。图书馆还使用目录来组织书籍。尽管与该术语在计算机科学中的其他用法仍有一些混淆,就像表格 (http://en.wikipedia.org/wiki/Database_catalog),但我认为 catalogcatalogue 是准确且富有表现力的查找表的术语。

        【讨论】:

          【解决方案5】:

          Map 是一个良好而准确的名称,正如a paid nerd 所建议的那样。

          我也喜欢 Lua 使用的名称 Table

          【讨论】:

            【解决方案6】:

            您提到您不想使用“哈希表”,因为这会将它与给定的实现联系起来。但这一定是坏事吗?开发代码的人会关心你的类似字典的语言结构是否具有类似哈希表的性能特征,并且简单地将其称为哈希表是传达这一点的最清晰方式。

            但是,如果您真的要拥有一个通用接口,然后是特定实现(例如 Java 如何拥有 Map 接口,然后是 HashMapTreeMap 等实现),那么我同意付费书呆子的观点“地图”可能是最好的选择。

            【讨论】:

            • 我完全同意,在其名称中包含实现某些东西并不是一件坏事,甚至是。但是我的语言的一个特点是它试图尽可能多地抽象(以最大化运行时优化的可能性)。这方面的其他示例是Text(默认为String,但如果您进行大量连接,它将切换到Rope)和ListArrayList,但如果您附加很多,它将成为LinkedList )。
            【解决方案7】:

            在 Python 中,dictionaries 正式成为ma​​ppings 的唯一且唯一的示例。

            不难看出,人们可能会争论什么是合理的“映射”,例如在数学中,函数始终是映射。我想我们可以将任何带有__getitem__() 的映射称为映射,其中还包括序列类型,例如list

            但是,请注意有一个official definition(强调我的):

            映射:容器对象(如dict) 支持任意键 使用特殊方法查找 __getitem__().

            所以,为了回答你的问题,我建议 mappingmap

            【讨论】:

              【解决方案8】:

              联想云

              地图云

              云,因为它是无序的。模糊不清。

              【讨论】:

                【解决方案9】:

                我觉得我会选择“Index”或“KeyedIndex”、“KeyIndex”...

                编辑: 哈哈DIY索引!或者我可能完全了解 dict 的错误?

                【讨论】:

                  【解决方案10】:

                  据我了解,恶作剧是……本质上有些关联性,它具有关键价值关系,我们正在寻找能够带来相同意义的词……所以如果要说的话,我会称之为AssociateKVMap ....但听起来不太酷....所以我猜让我们获得更多选择

                  【讨论】:

                    【解决方案11】:

                    恕我直言。

                    Assoc
                    Array
                    Dict
                    Hash
                    Index
                    KeyValue
                    Map
                    Table
                    

                    恕我直言。

                    NSMutableDictionary
                    hash_map
                    

                    【讨论】:

                    • 原因?您的群组看起来完全是任意的。
                    • 你是对的。我可以使用顶部列表中的语言进行编码。我使用 c++ 和 objc,因此不时碰到 NSMutableDictionay 和 hash_map。更喜欢较短的名字,但没有分析到足以说我有一个最喜欢的名字。
                    【解决方案12】:

                    也许这是我的 Perl 背景,但我更喜欢哈希。 # 看,符号看起来像哈希的样子。如果你有一个哈希值。只是我主观的2美分。

                    [编辑]

                    想想盘子哈希。好东西,不是罐头。配上土豆块、洋葱、辣椒,也许还有一些咸牛肉。乍一看,它看起来像是一大堆美味的随机食物。但是你可以在检查时命名这些部分。这是一种类型,天气你在上面放番茄酱或在上面放一些鸡蛋。现在想想玛莎斯图尔特一盘蔬菜。一切都是很好的蔬菜清单。您可以将其浸入牧场或腐殖质中或将其堆放在盘子上。见鬼,你可以拿一些西红柿放在哈希里。

                    这些是类型。这是一种组织数据的方式,可以建议如何处理它,但与它是分开的,恕我直言。

                    在我看来,地图更像是一种动作而不是一种类型。以下是食物的食用方法,或者更好的是食物如何进入您的嘴巴。

                    说到底,只是一个名字。

                    【讨论】:

                    • 是的,这是你的 Perl 背景。日常使用中的“#”更可能表示“数字”或“磅”,而不是“哈希”。 "Hash"、"splat" 和 "bang" 不是 '#'、'*' 和 '!' 的常用名称,所以请不要引用自然法则之类的东西来证明调用 Perl 用它的 ' 创建的东西是正当的#' 字符由该字符的名称。 (有趣的是,过去被称为“句号”的东西现在变成了“点”,主要是因为需要用语言表达网络 URL。)
                    • @Paul - 通用名称取决于语言环境。在英国,'#' 被称为哈希。如果你把它称为其他人不理解的东西。如果你说“英镑”,那当然是“英镑”。
                    • 我对“hash”的问题是它描述了一个实现细节。如果查找被实现为一个二叉树,它甚至从未考虑一个值的哈希值?
                    • @g. - 你们这些愚蠢的英国人总是用错误的名字来称呼事物!你一直用“颜色”和“喜欢”这样的词来表达所有这些额外的“你”是怎么回事?下一步是什么,去麦当劳买个小偷?
                    • @Paul Perl 使用 % 来表示散列。 # 表示注释。我只是指出符号# 看起来像一个哈希表。句号结束一个句子,一个点不结束。这没有改变。 IP 地址在 URL 之前。
                    【解决方案13】:

                    “列表”是否意味着排序?不在现实世界中——购物、清单、待办事项清单、洗衣清单……这些都不是订购的,它们只是写成they occur to the list writer 的东西。

                    您选择的任何词都不可避免地会与日常使用和/或与专业 IT 使用的关联发生冲突。所以,如果你真的想要一个更好的词,你需要一个新的隐喻,而不是试图重新利用其他语言的名称。那么Rack呢?还是IndexedBagKeyPairStash?

                    【讨论】:

                      【解决方案14】:

                      本质上它们是带有键索引器的列表。您可以调用 KeyValuePairCollection。

                      【讨论】:

                      • 比“KeyValuePairSet”还要多输入。
                      • 仍然比“map”长 4 倍
                      猜你喜欢
                      • 1970-01-01
                      • 1970-01-01
                      • 2015-04-15
                      • 1970-01-01
                      • 2013-11-29
                      • 2011-05-23
                      • 2015-04-21
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多