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

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]$ 

(编辑:李大同)

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

    推荐文章
      热点阅读