Perl HASH数组
发布时间:2020-12-15 23:52:30 所属栏目:大数据 来源:网络整理
导读:数组的优缺点:元素内容可由下标直接得到。基址 + 下标 * 元素大小,是访问最快的方法。缺点:元素内容与位置无关。HASH数组的特点:1.有的位置可能无值为空,但也要留出空间。浪费空间,换取时间2.数组内容没有顺序的3.对查找单个值,比数组通过索引立即找到值慢,
数组的优缺点: 元素内容可由下标直接得到。基址 + 下标 * 元素大小,是访问最快的方法。 缺点: 元素内容与位置无关。 HASH数组的特点: 1.有的位置可能无值为空,但也要留出空间。浪费空间,换取时间 2.数组内容没有顺序的 3.对查找单个值,比数组通过索引立即找到值慢,多了函数计算。但比链表块,不用从头到尾查一遍。 HASH 数组的形式: %h=('a',1,'b',2); 以%开头,与$h是不同的变量。()为空散列。 关联数组的下标称为关键字key,由key得到的为值value %h=('a'=>1,'b'=>2);键和值间的逗号可为=>,相当于逗号。 %h=(a=>1,b=>2);键的引号可省略,用=>时自动认为是字符窜。 元素形式: $hash{'a'} 元素为简单变量,用$。 key为简单变量类型 $h{2.5},${-1},$h{$k} 关联数组的赋值 标准: %a=("key1","key2",2); 数组和散列间赋值:%h=@a,散列也是数组。 @a=%h,数组元素的顺序随机。 %h1=%h2 ($a,%h)=@array; %h=(%first,%second),浪费内存 %h1=(%h2,'k','v'),增加一组键值。必须成对出现。 函数的返回:%h=split(); 片断:@keys=('a','c'); @hash{@keys}=@hash{reverse(@keys)} @不能改为$,因为$hash{}中key要求是简单变量,@keys=3,成了$hash{3} 元素赋值与操作: 增加: 赋值$h{'a'}=1,不存在则创建,hash不存在也创建。 删除: delete $h{$k} 不要用push,pop,shift,splice等与顺序有关的函数,否则结果不可知。 显示:不能print '%hash";原样打印 print %hash 显示无空格。 用遍历的方法来逐一显示。 当$a=%h时,显示的不是长度,形如x/y。表示散列长度为y,已经有值的元素是x个 HASH 数组操作函数 Keys(%h),values(%h); 用keys(%h)返回键列表,values(%h)返回值列表来显示。 返回的元素无顺序 each(%h) 循环 ($key,$value)=each(%hash) 取出键值对。 不要先keys返回键,再$hash($k)返回值,效率不高。 循环中不要增加或删除元素,因为散列是无序的。最后返回undef Exists 关键字是否存在:exists $h{'key'} Undef(%h):删除散列,相当于 %=(); 关联数组模拟数据结构 1.链表 每项含内容和指向下一个元素的指针,头指针指向第一个元素。 %list=("a","b","c",""); $header="a"; 2.结构 struct{int i,int j}s;s.i=1;=>%s=("i","","j","");$s{"i"}=1; $aoh->[0]{'k11'} 访问引用指向它的元素 HASH数组是一种数组 可以与数组相互赋值。 %h=@a,@a=%h,%h1=%h2 (%h,'v') 可以出现在=左边或右边 片断: $h{'a','b'} HASH 数组是特殊的数组 %,{} key=>value, 成对出现,不成对不能赋值。 不能"%hash" 显示为2/8 (用了多少) 关联数组是无序的 [oracle@jhoa 13]$ cat 1.pl #!/usr/bin/perl %h=(a=>1,b=>3); print "%hn"; print %h; $a=%h; print "n$an"; ##分配了8个值对的空间,已经用了2个 $aoh=[{'k11'=>'v11','k12'=>'v12'},{'k21'=>'v21','k22'=>'v22'}]; $hash=$aoh->[0]; print "@{[%$hash]}n"; $hoh={k1=> {key1=>'value1',key2=>'value2'},k2=>{key1=>'val1',key2=>'val2'} }; print "$hoh->{k1}{key1}n"; print "@{$hoh->{k1}}{'key1','key2'}"; [oracle@jhoa 13]$ perl 1.pl %h a1b3 2/8 k11 v11 k12 v12 value1 value1 value2[oracle@jhoa 13]$ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |