Perl语言入门笔记 第六章 哈希(hash)

=pod

哈希

    哈希表里只是一堆的键值对而已,而没有任何顺序,键可以是任意字符串,值也是
    awk的哈希键值对增多的时候会逐渐变慢,而perl没有这个缺点

 访问哈希元素:
    $hash{$some_key}

    foreach my $person (qw< barney fred >)
    {
        print "I'v heared of $person $family_name{$person}.\n";
    }
    在挑选哈希名的时候,最好使得哈希名和键之间能放进去一个"for"字,比如"family_name for fred"是filntstone,
    因此把哈希命名为family_name能清晰地反映出键和值之间的关系。
    $foo = 'bar';
    print $family_name{$foo . 'ney'}; #打印"rubble",连接在一块


    哈希可以被转换成列表

    哈希赋值:
        不是常见用法,但哈希真的可以用一般的赋值语法来赋值;
            my %new_hash = %old_hash;
            得到一个反序的哈希:键值互换
            my %inverse_hash = reverse %any_hash;

 胖箭头:
    my $last_name = (
        'fred' => 'flintstone',
        'dino' => 'undef',
    );

哈希函数:
    perl中有很多有用的函数可以一次处理整个哈希。
    keys函数能返回哈希的键列表,而values函数能返回对应的值列表。如果哈希没有任何的成员,则两个函数都返回空列表

    my @k = keys %hash;
    my @v = values %hash;
    上面的keys和values是一一对应的
    得到哈希中元素的个数:
        my $count = keys %hash;
        my $count = values %hash;
        if(%hash)
        {   }

    each函数:
        唯一适合使用each的地方
        while(my($key, $value) = each %hash)
        {   }

    foreach函数:
        foreach $key (sort keys %hash)
        {   }

    判断某项哈希元素的真假:
        if($book{$some})
        {   }

    exists函数:
        检查哈希中是否存在某个键,可以使用exists函数
        if(exists $book{"dino"})
        {   }

    delete函数:
        my $person = "betty";
        delete $book{$person}; #撤销$person的借书证
        上面"将undef存入哈希元素"并不相同,在这两种情况下,exists($books{"betty"})会得出相反的结果。在delete之后,键便不会出现在哈希之中,但存入undef后,键却是一定会存在的。

 哈希元素的内插:
    可以将单一哈希元素内插到双引号引起的字符串中。
    foreach $person (sort keys %books)
    {
        if($book{$person})
        {
            print "$person has $books{$person} items\n";
            #但这种方式不支持内插整个hash表
        }
    }

%ENV哈希:
    print “PATH is $ENV{PATH}\n”;

=cut

转载于:https://www.cnblogs.com/v-BigdoG-v/p/7398618.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值