找回密码
 注册
查看: 2076|回复: 0

perl语言什么是哈希

[复制链接]
发表于 2011-11-14 20:19:28 | 显示全部楼层 |阅读模式
哈希是一种数据结构,和数组类似,可以将值存放到其中,或者从中取回值。但是,和数组不同的是,其索引不是数字,
而是名字。也就是说,索引(这里,我们将它叫key)不是数字而是任意的唯一的字符串(参见图6-1)。
这些keys 是字符串,因此当从中取值时不是使用如数字3,而是使用此hash 元素的名字wilma。
这些keys 可以是任意的字符串,你可以使用任何的字符串作为key。但,它们是唯一的;就像数组中只有一个元素的索引
是3,这里也只有一个hash 元素的名字为wilma。
另一种思考hash 的方法是,把它看作一堆数据(a barrel of data)(参见图6-2),每一个数据都有一个相应的标签。可以通
过标签访问此标签对应的元素。但其中是没有“第一个”元素的概念的。在数组中,数组元素从0,1,2 开始编号。但在hash
中,没有确定的顺序,因此也没有第一个元素。只是一些key/value 对的集合。
哈希的keys 和values
keys   values
“foo” 35
“bar” 12.4
“2.5” “hello”
“Wilma” 1.72e30
“betty” “bye\n”

keys 和values 均为任意的标量,但keys 通常转换为字符串。因此,如果将表达式50/20 作为keys◆,则其通常被转换为3
字符的字符串“2.5”。这是上图中的一个key。
◆此处为数字表达式,而非5 个字符的字符串“50/20”。如果我们将上述5 个字符的字符串作为hash 的key,则其不会被转变。
通常,由于Perl 的“没有不必要的限制”的设计哲学:hash 可以是任意大小,从空hash(没有key/value 对),到任何你内存
允许的大小。
某些实现了hash 的语言(如早期的awk 语言,Larry 从中借鉴了hash),当hashes 变大时,速度会变慢。Perl 中不会有这种
问题,因为它有一个优秀的算法◆。因此,如果Perl 只有3 个key/value 对,它的速度很快。当拥有3 百万key/value 对时,
其速度仍非常快。大的hash 表,对性能不会有什么影响。
◆技术上讲,当hashes 很大时,Perl 会根据需要而重建hash。“hashes”这个名词的来源即是由于使用了hash 表来实现它。
keys 是唯一的,但values 可以重复。hash 的value 可以是数字,字符串,undef,或者它们的混合◆,但key 是唯一的。
◆事实上,任意的标量值,包括我们没有在本书见过的标量类型。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|小黑屋|生物统计家园 网站价格

GMT+8, 2024-11-21 21:31 , Processed in 0.025315 second(s), 16 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表