1、Perl哈希简介
-
什么是哈希
-
英文名hash,也被称作散列
-
是一种数据类型
-
哈希有两部分组成:
-
键(key)
-
值(value)
-
键和值可以是任何的标量
-
键的取值必须唯一,值可以重复
-
-
哈希是无顺序的
-
以%开头,如%car, %class
-
对于一维数组%class, $class{"小李"}是一个值
image.png -
多维哈希,$calss{"小李"}{"English"}
-
对于多维哈希,前面几级也可以看作成hash,%{$class{“小李}}
image.png
-
-
哈希的键和值
-
哈希和数组的关系
-
Hash结构有时候也被称作关联数组
-
同名的标量,数组和hash之间没有任何关系:$student, @student, %student
-
区别在于:
-
表示方法不同,一个是@,一个是%
-
索引量的相对性和绝对性
-
数组是一种相对引用
-
哈希是一种绝对引用
image.png
-
-
2、Perl哈希的操作
-
创建哈希
-
创建空哈希:%hash_A = ();
-
给hash赋值
-
列表直接给hash赋值
-
%hash_A = ("key1","value2","key2","value2"...);
-
Perl中用胖箭头=>解决键值不易区分的问题:%hash_A = ("key1" => value1, "key2" => value2);
-
使用胖箭头时,等号左边的值会自动被引号引用起来:%hash_A = (key1 => value1, key2 => value2);
-
-
指定键进行赋值,每次赋值一个:$hash{"kay"}=value;
-
hash之间赋值
- 使用等式赋值:%hash_A = %hash_B;
-
多维hash的赋值
- 直接在赋值的时候使用括号标识层级
-
-
在hash中修改、添加元素
-
给与之对应的键设置一个新的数值
-
如果这个键不存在,他将会被创建
-
形式为$hash_name{"key"}=value
-
-
删除hash值
- 使用delete进行删除:delete($hash_name{key})
-
hash的切片
-
hash的切片指的是把想要的元素提取到一个新的数组
-
@hash_name{"key1","key2"...} #一定要用{}
-
-
hash的合并
-
将两个或多个hash合并成一个hash
-
%new_hash = (%hash_1,%hash2) #一定要用()
-
如果键一样,后面的覆盖前面的
-
3、Perl哈希函数
-
exist函数
-
判断hash中是否存在对应的键值
-
exist $hash{key}
-
返回值为0,hash元素值不存在
-
返回值为1,hash元素值存在
-
-
each函数
-
返回2个元素的列表
-
分别是键和它对应的值
-
($key, $value) = each(%hash)
-
-
ENV函数
-
%ENV特指当前环境变量哈希
-
键是变量名,值是变量值
-
-
reverse函数
-
该函数将哈希的键和值进行倒转
-
%hash_B = reverse %hash_A
-
-
keys函数
-
返回hash所有键的列表
-
@array = keys %hash
-
只返回下一级
-
顺序是随机的
-
-
values函数
-
返回hash值的列表
-
@array = values %hash
-
只返回下一级
-
顺序是随机的
-
4、Perl哈希的使用
-
获取hash的长度
-
hash中键的个数
-
对于数组,$length = @array返回数组中元素的个数
-
对于hash,$length = %hash返回复合值
-
$length = keys %hash获得hash的长度
-
-
hash的排序
-
hash的存储是无序,随机的
-
使用sort进行排序
-
$a cmp $b: 从小到大,字母,ASCII值
-
$a <=> $b: 从小到大,数字
-
-
-
hash的引用
-
hash引用的hash的地址
-
对引用进行操作会改变原hash的值
-
引用的创建:
-
使用\符号:$herf = \%hash; $aref = $href;
-
用{}表示匿名哈希的引用:$href = {"key1"=> abc, "key2"=> def}
-
-
-
hash的解引用
-
使用{}进行解引用,相当于一个hash名
-
%hash = {"fruit1"=>"apple","fruit2"=>"pear","fruit3"=>"banana"}
-
$href = \%hash
-
%{href}等价于%hash
-
${$href}{"fruit1"}等价于$hash{"fruit1"},值为“apple”
-
-
用“->"解引用
-
${$href}{"fruit1"}等价于$hash{"fruit1"}, 值为"apple"
-
可写为:$href->{"fruit1"}
-
同$href{"fruit1"}没有任何关系
-
-
▼更多精彩推荐,请关注我们▼
image.png