设为首页 收藏本站
查看: 716|回复: 0

[经验分享] perl中哈希表的操作《3》

[复制链接]

尚未签到

发表于 2015-12-28 12:41:47 | 显示全部楼层 |阅读模式
  哈希是一种数据结构,是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->[0][0], "\n";
  具体形式:
  数组:$aref->[]
  哈希:$href->{}
  子过程:$href->()
  4,引用的赋值:
  $aref2 = $aref1; 将使得$aref2和$aref1指向同一个数组,如果想将$aref1指向的数组拷贝一份给$aref2的话,使用下面的方法,[]里面对数组进行解引用,而[]以解引用后的数  组为内容生成了一个新的匿名数组,又赋值给$aref2。
  $aref2 = [@{$aref1}];
    注意:不能使用下面的形式,外层的[]是不可缺少的。由于=左边是标量,所以右边的数组会被解释为标量环境,得到的是数组元素个数,而不是元素本身。但是如果加上[]就可以   了,这样perl知道这是一个匿名数组的赋值。
  $aref2 = @{$aref1};

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-157484-1-1.html 上篇帖子: perl 递归地遍历目录下的文件 下篇帖子: Perl 学习手札之十:subroutines
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表