chenqb 发表于 2015-12-28 12:41:47

perl中哈希表的操作《3》

  哈希是一种数据结构,是key/value对的集合,通过两种方法来说明hash表的用法。
  第一种是国家和首都和关系来说明其用法。
  my %capitals = (
         "China" => "Beijing",
        "America" => "Washington",
        "Germany" => "Berlin",
        "France" => "Paris"
        );
  1,遍历操作:
  while ((my $key,my $value) = each %capitals) {
        print "$key => $value\n";
  }
  foreach my $key (keys %capitals) {
         print "$key => $capitals{$key}\n";
  }
  2,排序遍历:
  foreach my $key (sort keys %capitals) {
         print "$key => $capitals{$key}\n";
  }
  3,添加操作:
  if ( !exists $capitals{"Australia"} ) {
         print "there is no Australia, so adding it\n";
         $capitals{"Australia"} = "Sydney";
  }
  4,删除操作:
  delete $capitals{"America"};
  第二种通过国家和城市来说明其用法,由于每个国家对应一个城市列表,而hash表的键值需要必须是标量,只有通过引用来解决这个问题:
  引用就是指向一个完整列表或完整哈希(或指向其他的东西,比如函数)的标量值,引用的具体用法。
  1,在数组,hash表或者普通变量前面加个斜线“\”就能得到这个变量的引用:
  my @china_contries = ("beijing", "nanjing", "tianjing");
  my $href = \@china_contries;
  2,匿名引用分为匿名数组引用和匿名hash表引用:
  my $href = ["beijing", "nanjing", "tianjing"];
  my $seasons = [
  ["Jan.", "Feb.", "Mar."],
  ["Apr.", "May.", "Jun."],
  ["Jul.", "Aug. ", "Sep."],
  ["Oct.", "Nov.", "Dec."]
  ];
  my $captals = {"China" => "beijing", "Australia" => "Sydney", "America" => "Washington"};
  3,各种变量的引用有如下几种使用方法:
  1,与普通变量的访问方法相比,假设原来的变量名是name,则此方法在所有name出现的地方用$name代替:
  foreach my $key (keys %$capitals) {
        print "key:$key, value:$$capitals{$key}\n";
  }
  2,与普通变量的访问方法相比,假设变量原来的名字是name,则现在用{$name}来代替name:
  print %{$capitals}, "\n";
  3,使用箭头符号->,该方法不适用于标量:
  print $captials->{"China"}, "\n";
  print $seasons->, "\n";
  具体形式:
  数组:$aref->[]
  哈希:$href->{}
  子过程:$href->()
  4,引用的赋值:
  $aref2 = $aref1; 将使得$aref2和$aref1指向同一个数组,如果想将$aref1指向的数组拷贝一份给$aref2的话,使用下面的方法,[]里面对数组进行解引用,而[]以解引用后的数  组为内容生成了一个新的匿名数组,又赋值给$aref2。
  $aref2 = [@{$aref1}];
    注意:不能使用下面的形式,外层的[]是不可缺少的。由于=左边是标量,所以右边的数组会被解释为标量环境,得到的是数组元素个数,而不是元素本身。但是如果加上[]就可以   了,这样perl知道这是一个匿名数组的赋值。
  $aref2 = @{$aref1};
页: [1]
查看完整版本: perl中哈希表的操作《3》