哈希结构

哈希可看做一种特殊的数组,特殊之处在于哈希采用key来索引,而数组用位置序号来索引

哈希变量用%a表示,初始化格式如下:

$a{key} = value;        //初始化只含一个key-value对的哈希
%a = ( key1, value1, key2, value2, ... );        
%a = ( key1 => value1, key2 => value2, .... );        //上面两种初始化方法效果相同,但后者可读性更好


从哈希中取数据

$a{key}        //和数组类似,取单个元素时使用$符号

Perl提供了两个函数keys和values,分别返回哈希的key列表和value列表,如

@keys = keys %a;
@values = values %a;

另外还有一个reverse函数,作用是将哈希中的key和value对调,以value来索引key(由于value不一定唯一,故reverse操作可能会引起冲突)


Perl还提供了exists和delete两个函数,分别用于判断元素是否存在和删除元素,如

print "exist!" if(exists $a{key});	//若存在则exists函数返回true,否则返回false
delete $a{key};	//删除%a中对应key的元素

若要清空整个哈希,简单地使用下面这条语句即可:

%a = ();

总之牢记两条准则:

  • 对于数组和哈希,若进行整体操作,则分别使用@和%;若进行单个元素操作,则均使用$,此时Perl会根据后跟的中括号[]和花括号{}识别出数据类型
  • 哈希是一种特殊的数组


哈希的一些应用

1.确定文本中各单词的频率分布

while(<>){
	while(/(/w[/w-]*)/g){
		$times{$1}++;	//$1对应模式匹配中圆括号包围的部分
	}
}

生成的哈希%times的key为单词,value为对应的出现次数

 

2.去掉数组中的重复元素

@fish = qw(one fish two fish red fish blue fish);
		foreach (@fish){
			$tmp{$_} = 1;        //这儿只是为了将多个数组元素对应为单个哈希元素,至于赋值没有意义
		}
		@uniq_fish = keys tmp;


3.获得两个数组的交集

@a = qw(1 2 3 4 5);
@b = qw(3 4 5 6 7);
foreach (@a){
	$tmp{$_} = 1;        //此处将@a转换为%tmp是为了在后面使用exists函数
}
@intersection = grep exists $tmp{$_} @b;	//grep函数判断@b中的元素是否在%tmp中同样存在,若存在,则返回该元素的值并赋给@intersection

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值