Perl语言学习(六)Perl哈希

1、Perl哈希简介

  • 什么是哈希

    • 英文名hash,也被称作散列

    • 是一种数据类型

    • 哈希有两部分组成:

      • 键(key)

      • 值(value)

      • 键和值可以是任何的标量

      • 键的取值必须唯一,值可以重复

    • 哈希是无顺序的

    • 以%开头,如%car, %class

    • 对于一维数组%class, $class{“小李”}是一个值

      《Perl语言学习(六)Perl哈希》 image.png

    • 多维哈希,$calss{“小李”}{“English”}

    • 对于多维哈希,前面几级也可以看作成hash,%{$class{“小李}}

      《Perl语言学习(六)Perl哈希》 image.png

  • 哈希的键和值

  • 哈希和数组的关系

    • Hash结构有时候也被称作关联数组

    • 同名的标量,数组和hash之间没有任何关系:$student, @student, %student

    • 区别在于:

      • 表示方法不同,一个是@,一个是%

      • 索引量的相对性和绝对性

      • 数组是一种相对引用

      《Perl语言学习(六)Perl哈希》 image.png

      • 哈希是一种绝对引用

        《Perl语言学习(六)Perl哈希》 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”}没有任何关系

参考来源:https://www.jikexueyuan.com/course/1728.html

▼更多精彩推荐,请关注我们▼

《Perl语言学习(六)Perl哈希》 image.png

    原文作者:Davey_63dc
    原文地址: https://www.jianshu.com/p/686cce7d3973
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞