哈希

作者: 食梦狸猫 | 来源:发表于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