在Python中,有词典:
residents = {'Puffin' : 104, 'Sloth' : 105, 'Burmese Python' : 106}
在Ruby中,有哈希:
residents = {'Puffin' => 104, 'Sloth' => 105, 'Burmese Python' => 106}
唯一的区别是:
与=>
语法。 (注意,如果示例使用变量而不是字符串,那么就没有语法差异。)
在Python中,您可以通过键调用字典的值:
residents['Puffin']
# => 104
在Ruby中,您也可以通过键获取哈希值:
residents['Puffin']
# => 104
它们看起来是一样的。
Ruby中的Hash和Python中的字典有什么区别?
答案 0 :(得分:11)
Ruby's Hash和Python's dictionary都代表Map Abstract Data Type (ADT)
..关联数组,映射,符号表或字典是由(键,值)对的集合组成的抽象数据类型,这样每个可能的键在集合中最多出现一次
此外,Hash和字典都实现为Hash Tables,这要求密钥可以清除和等同。一般来说,哈希表上的插入和删除以及获取操作都是O(1)摊销或快速,独立于散列/字典大小"。
[哈希表]是用于实现关联数组的数据结构,关联数组可以将键映射到值。 哈希表使用哈希函数来计算桶或槽数组的索引,从中可以找到正确的值。
(使用Trees的地图实现,而不是哈希表,可以在持久化和函数式编程上下文中找到。)
当然,Ruby和Python设计选择以及提供的特定/默认Map实现之间也存在差异:
nil
中的Hash
,dict
1 中的例外Hash
保证(自Ruby 2.0起),dict
无法保证(直到Python 3.6) 1 Hash
仅 1 Hash
仅 2 []
语法支持是常见的,因为两种语言都为重载索引运算符提供语法糖,但是在下面实现不同,并且在缺少键时具有不同的语义。
1 Python还提供defaultdict
和OrderedDict
实现,它们具有与标准dict
不同的行为/功能。这些实现允许默认值生成器,缺失键处理以及标准dict
类型中未找到的其他排序保证。
2 Python中的某些核心类型(例如list
和dict
)明确拒绝可散列,因此它们不能用作基于的字典中的键散列。这并不是dict
本身的差异,并且仍然可以使用可变自定义类型作为键,尽管在大多数情况下不鼓励这样做。
答案 1 :(得分:8)
他们(Python中的字典,Ruby中的哈希)对于所有实际目的都是相同的,并实现了一般Dictionary / Hashtable
(一个键 - 值存储),您通常存储给定唯一键的条目,并获取<强>快查找它的值。
答案 2 :(得分:5)
现在ruby还支持以下sysntax:
residents = {'Puffin': 104, 'Sloth': 105, 'Burmese Python': 106}
但是我们应该用符号表示法来访问值:
residents[:Puffin]