PERL中的哈希表操作
哈希表究其实质而言就是一种数据结构,可以随机存取,没有上限,但是不同之处则在于数组呢,是根据数组来确定所要求的数据在数组中的偏移量,而哈希则是以名字来进行检 索,或者说作为索引值的,也就是说检索用的键不是数字,而是保证唯一性的字符串,即键值,键值必须保持唯一性!! 需要指出的是,虽然哈希表的键的名称要求必须唯一,但是对于键的值,则是可以相同的。 $family_name{"fred"}="John"; 这样就可以随着使用而定义,开始的时候我在想这样是不是就跟C++中的结构体类似?但是之后想了想发现,结构体必须在使用之前定义,远没有哈希这样灵活,哈希成员的访问 使用{},不同于数组的[], 也可以动态的创建哈希元素 $family_name{"tmp"}="test";极富灵活性!!! 对于哈希表中某个元素的访问类似于数组,首先是哈希表名称,不过其索引应该使用花括号,然后数组下标被字符串代替。 $tmp=$family_name{"tmp"}; 对于哈希中没有的元素会使用undef最为返回值代替 使用胖箭头的方式定义哈希列表 ?%last_time=( 这里要注意的是,在使用胖箭头方式定义哈希表的时候,应该使用小括号,并不像单个定义哈希元素时使用大括号的方式 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, ); if(exists $Hight{"li"}) { ? ? #执行到此说明存在键名是"li"的键 ? ? delete $Hight{"li"};#说明已经不存在该键名是li的键 ? ?? ? }
哈希函数的遍历
my %Hight=( ? ? "li"=>3,? ? "zhang"=>5,? ? "mi"=>5,); foreach(@k=keys %Hight) { ? ? print $Hight{$_}."n"; }
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |