PERL中的哈希表操作

哈希表究其实质而言就是一种数据结构,可以随机存取,没有上限,但是不同之处则在于数组呢,是根据数组来确定所要求的数据在数组中的偏移量,而哈希则是以名字来进行检

索,或者说作为索引值的,也就是说检索用的键不是数字,而是保证唯一性的字符串,即键值,键值必须保持唯一性!!

需要指出的是,虽然哈希表的键的名称要求必须唯一,但是对于键的值,则是可以相同的。

$family_name{"fred"}="John";
$family_name{"barney"}="rubble";
foreach $person(qw< fred barney >)
{
print "i have heared the name is ".$family_name{$person}."\n";
}

这样就可以随着使用而定义,开始的时候我在想这样是不是就跟C++中的结构体类似?但是之后想了想发现,结构体必须在使用之前定义,远没有哈希这样灵活,哈希成员的访问

使用{},不同于数组的[],

也可以动态的创建哈希元素

$family_name{"tmp"}="test";极富灵活性!!!

对于哈希表中某个元素的访问类似于数组,首先是哈希表名称,不过其索引应该使用花括号,然后数组下标被字符串代替。

$tmp=$family_name{"tmp"};

对于哈希中没有的元素会使用undef最为返回值代替

使用胖箭头的方式定义哈希列表

 %last_time=(
"fred"=>"hehe",
"dino"=>undef,
"barney"=>"rubble",
"betty"=>"rubble",);#整个列表以一个额外的逗号结束
foreach (qw<fred dino barney betty>)
{
   
print $last_time{$_}."\n";
}

这里要注意的是,在使用胖箭头方式定义哈希表的时候,应该使用小括号,并不像单个定义哈希元素时使用大括号的方式

keys 和values函数

my %hash=("a"=>1,"b"=>2,"c"=>3);
my @k=keys %hash;
#获得hash表的键名称
foreach(0..(@k-1))
{
print "the hash keys are".$k[$_]."\n";
}
#获得哈希表的值
my @m=values %hash;
foreach (0..(@m-1))
{
print "the hash values are".$m[$_]."\n";
}
exist函数
my %Hight=(
    "li"=>3,
    "zhang"=>5,
    "mi"=>5,
);
if(exists $Hight{"li"})#exists函数只是检查该哈希表中是否有键名是"li",与键值无关
{
    print $Hight{"li"};
}
delete函数

my %Hight=(
    "li"=>3,
    "zhang"=>5,
    "mi"=>5,
);
if(exists $Hight{"li"})
{
    #执行到此说明存在键名是"li"的键
    delete $Hight{"li"};#说明已经不存在该键名是li的键
    
 
}
哈希函数的遍历
my %Hight=(
    "li"=>3,
    "zhang"=>5,
    "mi"=>5,
);
foreach(@k=keys %Hight)
{
    print $Hight{$_}."\n";
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

世纪殇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值