加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl hash 常见用法

发布时间:2020-12-15 20:51:31 所属栏目:大数据 来源:网络整理
导读:基本用法 # 初始化 %h为空数组 %h = {}; # 用数组初始化%h为 a=1,b=2 %h = ('a',1,'b',2); # 意义同上,只是另一种更形象化的写法。 %h = ('a'=1,'b'=2); #如果key是字符串,可以省略引号。下面这行和上面那行是一样的 %h = (a=1,b=2); # 用{}来访问 print q
基本用法 # 初始化 %h为空数组 %h = {}; # 用数组初始化%h为 a=>1,b=>2 %h = ('a',1,'b',2); # 意义同上,只是另一种更形象化的写法。 %h = ('a'=>1,'b'=>2); #如果key是字符串,可以省略引号。下面这行和上面那行是一样的 %h = (a=>1,b=>2); # 用{}来访问 print "$h{a}/n"; # 打印1 $h{b} = '2b'; print "$h{b}/n"; # 打印2b # 删除key用delete delete $h{b}; # 从$h删除'b' 清空hash undef %h 得到hash的所有键值 # 得到所有keys,顺序取决于hash函数,或者说是乱序 @all_keys = keys %h; # 所有键值,是按hash的值从大往小排列的。值的比较是数字比较(比如说,10>9) @all_keys = sort{$h{$b}<=>$h{$a}} (keys %h); # 所有键值,是按hash的值从小往大排列的。值的比较是数字比较 @all_keys = sort{$h{$a}<=>$h{$b}} (keys %h); # 所有键值,是按hash的值从小往大排列的。值的比较是字符串比较 #(比如说,'10' < '9') @all_keys = sort{$h{$a} cmp $h{$b}} (keys %h); 判断hash是否包含key exists($h{$key}); Hash的长度 想要知道一个hash存放多少数据 $hash_size = keys %h # 把%h的长度放到$hash_size中 print scalar kes %h,"/n" # 打印%h的长度。这里用了scalar来返回数组长度。 遍历一个hash while (my ($k,$v) = each %h) { print "$k ---> $v/n"; } Reference引用 Reference类似于C/C++的指针 $h_ref = /%h; # 获得一个hash的reference %aHash = %{$h_ref};# 把hash reference当成hash用 $value = $h_ref->{akey} # 这个和%h{akey}是一样的 传递hash到函数 一般都是传递一个reference到函数 %h = (); $h{a}=1; foo(/%h) print $h{b},"/n"; # 打印出2。这个值来自于函数foo() ? sub foo { my ($h) = @_; print $h->{a},"/n"; # 打印出1 $h->{b} = 2; } 函数返回hash,或者hash引用(hash reference) 函数可以返回hash sub foo { my %fh; $fh{a} = 1; return %h; } ? my %h = foo(); print "$h{a}/n"; #打印出 1 但是这样等于把整个hash从%fh复制到了%h,效率比较低。可以考虑返回hash的引用: sub foo { my %fh; $fh{a} = 1; return /%fh; } ? my $hr = foo(); print "$hr->{a}/n"; #打印出 1 my %h = %{foo()} # 如果就是想复制,也可以用这种方法 不用担心在sub foo里的%fh是局部变量,perl会自动管理内存。它会发现%fh被$hr引用,就不会清理%fh的内存,并且$hr失效后释放内存

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读