perl学习(6) 哈希
哈希在perl里是很重要的数据结构,现在想想定义三种变量: 1,标量,就是c中的变量:$name 2,列表,就是数组:@list 3,哈希,形式上就是c中的map:%hash ? 1.1.定义? 如果Perl 只有3 个key/value 对,它的速度很快。当拥有3 百万key/value 对时,其速度仍非常快。大的hash 表,对性能不会有什么影响。 ? ? 特点: 1.?????? 当将某个值存储在已经存在的hash 元素中,以前的值会被覆盖 2.?????? 如果没有存放值,则其返回undef。 ? ? #! /usr/bin/perl use strict ; use warnings ; #声明 my %family_name; $family_name{"xiaowei"} = "huang"; $family_name{"jialin"} = "wang"; $family_name{"areu"} = "who"; #初始化 my %color = ("red"=>1,"yellow"=>2,"black"=>3 ) ; ? 1.2.函数#hash function 1.2.1.?? keys,valuesmy @hashks = keys%color ;????????????? #返回所有的key my @hashvs = values %color ;??? #返回所有的value 在标量context 中,这些函数返回hash 中元素的个数(key/value)。此类操作不需要访问hash 的每一个元素,其效率是很高。 my $size = keys %color ;????? #得到3,是指有3 个key/value 对 ? 1.2.2.?? each 函数迭代hash 的每一个元素(如,检查每一个元素),一种通常的方法是使用each 函数,它将返回key/value 对的2元素列表。 实践中,一般只在while 循环中使用each: while (($key,$value) = each %hash){ ?????? print “$key => $valuen”; } ? #有序输出 foreach my $key (sort keys %color) { ??? print "$key=>",$color{"$key"},"n"; } ? 1.2.3.?? exists 函数要查看hash 中是否存在某个key,可以使用exists 函数,如果hash 中存在此key,则返回true,这和是否有对应的value 无关: if(exists $books{$dino}){ ?????? rint “Hey,there’s a libaray card for dino!n”; } ? 1.2.4.?? delete 函数delete 函数将某个给定的key(包括其对应的value)从hash 中删除。(如果不存在这个key,则什么也不做,会有警告或者错误信息。) my $person = “betty”; delete $books{$person}; 1.3.常用法(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |