哈希

作者: 食梦狸猫 | 来源:发表于2019-03-25 14:13 被阅读0次

    哈希可以容纳任意多的值并且能按需使用,且哈希以key值索引。哈希的值可以是数字,字符串,undef的组合。但key一定是字符串。哈希有自己的名字空间

    访问哈希元素

    hash{some_key}
    这和访问数组做法类似,只是用了花括号而且此时的键表达式是字符串。

    • 对已经存在的哈希元素赋值,会覆盖之前的值

    • 哈希元素会因赋值而诞生

    • 访问哈希表里不存在的值会得到undef

    访问整个哈希

    要访问整个哈希,可以用百分号%:%family_name。

    同样对整个哈希赋值,列表中的元素应该是键值对:

    %some_hash = ('foo',35,'bar',12.4,2.5,'hello')
    @any_array = %some_hash  #展开哈希,得到的键值对顺序不会像当初一样,因为perl对哈希的快速检索存储做了特别的排序。
    
    • 哈希可以用一般的赋值语法来复制:
    my %new_hash = %old_hash;
    my %inverse_hash = reverse %any_hash;
    #perl中会用列表中最后的键覆盖之前的键
    

    胖箭头

    这只是对哈希里逗号的另一种写法

    my %last_name = (
      'fred'      =>   'flintstone',
      'dino'     =>    undef,
    )
    

    哈希函数

    • keys函数和values函数
      keys函数能返回哈希的键列表,values函数能返回哈希的值列表。若没有成员则返回空列表
    my @k = keys %hash;
    

    而在标量上下文中,这两个函数会返回元素个数。

    my $count = keys %hash;
    
    • each函数
      each函数以迭代整个哈希,返回时是包含两个元素的列表,没有键值对了就会返回空列表。
    while (($key,$value) = each %hash)
    {
        print "$key => $value\n";
    }
    

    哈希的应用

    • exists函数
      判断哈希里是否存在某个键
    if(exist $books{"dino"})
    {
    
    }
    
    • delete函数
    delete $books{"betty"}{}
    

    这和把undef存入哈希元素是不同的,存入undef后,键是一定会存在的。

    %ENV哈希

    Perl访问运行环境可通过访问%ENV哈希,例如读取PATH值

    print "PATH is $ENV{PATH}\n";
    

    相关文章

      网友评论

          本文标题:哈希

          本文链接:https://www.haomeiwen.com/subject/fczmvqtx.html