zoukankan      html  css  js  c++  java
  • Perl哈希%hash

    哈希是 key/value 键/值对的集合。

    Perl中哈希变量以百分号 (%) 标记开始。

    访问哈希元素格式:${key}

    以下是一个简单的哈希实例:

    实例

    #!/usr/bin/perl
    %data = ('google', 'google.com', 'runoob', 'runoob.com', 'taobao', 'taobao.com');
    print "$data{'google'} = $data{'google'} ";
    print "$data{'runoob'} = $data{'runoob'} ";
    print "$data{'taobao'} = $data{'taobao'} ";

    执行以上程序,输出结果为:


    创建哈希

    创建哈希可以通过以下两种方式:

    一、为每个 key 设置 value

    $data{'google'} = 'google.com';
    $data{'runoob'} = 'runoob.com';
    $data{'taobao'} = 'taobao.com';

    二、通过列表设置

    列表中第一个元素为 key,第二个为 value。

    %data = ('google', 'google.com', 'runoob', 'runoob.com', 'taobao', 'taobao.com');

    也可以使用 => 符号来设置 key/value:

    %data = ('google'=>'google.com', 'runoob'=>'runoob.com', 'taobao'=>'taobao.com');

    以下实例是上面实例的变种,使用 - 来代替引号:

    %data = (-google=>'google.com', -runoob=>'runoob.com', -taobao=>'taobao.com');

    使用这种方式 key 不能出现空格,读取元素方式为:

    $val = $data{-google}
    $val = $data{-runoob}

    访问哈希元素

    访问哈希元素格式:${key},实例如下:

    实例

    #!/usr/bin/perl
    %data = ('google'=>'google.com', 'runoob'=>'runoob.com', 'taobao'=>'taobao.com');
    print "$data{'google'} = $data{'google'} ";
    print "$data{'runoob'} = $data{'runoob'} ";
    print "$data{'taobao'} = $data{'taobao'} ";

    执行以上程序,输出结果为:


    读取哈希值

    你可以像数组一样从哈希中提取值。

    哈希值提取到数组语法格式:@{key1,key2}

    实例

    #!/uer/bin/perl
    %data = (-taobao => 45, -google => 30, -runoob => 40);
    @array = @data{-taobao, -runoob};
    print "Array : @array ";

    执行以上程序,输出结果为:

    Array : 45 40

    读取哈希的 key 和 value

    读取所有key

    我们可以使用 keys 函数读取哈希所有的键,语法格式如下:

    keys %HASH

    该函数返回所有哈希的所有 key 的数组。

    实例

    #!/usr/bin/perl
    %data = ('google'=>'google.com', 'runoob'=>'runoob.com', 'taobao'=>'taobao.com');
    @names = keys %data;
    print "$names[0] ";
    print "$names[1] ";
    print "$names[2] ";

    执行以上程序,输出结果为:

    taobao
    google
    runoob

    类似的我们可以使用 values 函数来读取哈希所有的值,语法格式如下:

    values %HASH

    该函数返回所有哈希的所有 value 的数组。

    实例

    #!/usr/bin/perl
    %data = ('google'=>'google.com', 'runoob'=>'runoob.com', 'taobao'=>'taobao.com');
    @urls = values %data;
    print "$urls[0] ";
    print "$urls[1] ";
    print "$urls[2] ";

    执行以上程序,输出结果为:

    taobao.com
    runoob.com
    google.com

    检测元素是否存在

    如果你在哈希中读取不存在的 key/value 对 ,会返回 undefined 值,且在执行时会有警告提醒。

    为了避免这种情况,我们可以使用 exists 函数来判断key是否存在,存在的时候读取:

    实例

    #!/usr/bin/perl
    %data = ('google'=>'google.com', 'runoob'=>'runoob.com', 'taobao'=>'taobao.com');
    if( exists($data{'facebook'} ) ){
      print "facebook 的网址为 $data{'facebook'} ";
    } else {
      print "facebook 键不存在 ";
    }

    执行以上程序,输出结果为:

    facebook 键不存在

    以上代码中我们使用了 IF...ELSE 语句,在后面的章节我们会具体介绍。


    获取哈希大小

    哈希大小为元素的个数,我们可以通过先获取 key 或 value 的所有元素数组,再计算数组元素多少来获取哈希的大小,实例如下:

    实例

    #!/usr/bin/perl
    %data = ('google'=>'google.com', 'runoob'=>'runoob.com', 'taobao'=>'taobao.com');
    @keys = keys %data;
    $size = @keys;
    print "1 - 哈希大小: $size ";
    @values = values %data;
    $size = @values;
    print "2 - 哈希大小: $size ";

    执行以上程序,输出结果为:

    1 - 哈希大小: 3
    2 - 哈希大小: 3

    哈希中修改、添加或删除元素

    添加 key/value 对可以通过简单的赋值来完成。但是删除哈希元素你需要使用 delete 函数:

    实例

    #!/usr/bin/perl
    %data = ('google'=>'google.com', 'runoob'=>'runoob.com', 'taobao'=>'taobao.com');
    @keys = keys %data;
    $size = @keys;
    print "1 - 哈希大小: $size "
    $data{'google'} = 'google1.com';  #修改哈希中的值
    $data{'facebook'} = 'facebook.com';   # 添加元素
    @keys = keys %data;
    $size = @keys;
    print "2 - 哈希大小: $size ";
    delete $data{'taobao'};    # 删除哈希中的元素
     
    @keys = keys %data;
    $size = @keys;
    print "3 - 哈希大小: $size ";

    执行以上程序,输出结果为:

    1 - 哈希大小: 3
    2 - 哈希大小: 4
    3 - 哈希大小: 3

     
     
    自己常用哈希方法总结: 

    二维哈希:使用$hash{$key1}{$key2}=$value;
    遍历:
    foreach my $key1(sort keys %hash){    #首先对key1进行排序
      foreach my $key2(sort {$hash{$key1}->{$b}<=>$hash{$key1}->{$a}}  keys  %{$hash{$key1}}){      #对value值按照数字大小进行逆序排序
       #foreach my $key2(sort {$a<=>$b}  keys %{$hash{$key1}}){                                                              #对key2按照数字大小进行排序,正顺序排序
        print $key1."t".$key2."t".$hash{$key1}->{$key2}."n";
      }
    }
     
    一维哈希:
    遍历:
    foreach my $key(sort {$hash{$b}<=>$hash{$a}}  keys %hash){      #对value值按照数字大小进行逆序排序
      print $key."t".$hash{$key}."n";
    }
    对下图的总结:    
     
     
     
     
     
     




  • 相关阅读:
    requirejs 初探
    jquery版本
    querystring
    git 使用记录
    nodejs mocha 单元测试
    Jquery之promise
    nodejs express命令问题
    Sublime Text 资料整理
    SQL SERVER 2008 R2 自动备份并删除过期备份数据
    无法编辑的word解密
  • 原文地址:https://www.cnblogs.com/Formulate0303/p/11224993.html
Copyright © 2011-2022 走看看