现在的位置: 首页 > 综合 > 正文

数据类型之哈希

2012年10月22日 ⁄ 综合 ⁄ 共 1159字 ⁄ 字号 评论关闭

-- Start

学过 Java 的人应该对 hash 不陌生,所谓 hash 就是存储一对 key 和 value 的一种数据结构,它用来存储一种对应关系,如:省份证号和姓名,IP 地址和域名等等。在 Perl 中,key 必须是字符串,value 可以是任何标量。下面的例子演示如何使用hash。

#!/usr/bin/perl

%IDForName; # 空hash
%IDForName = (); # 空hash


%IDForName = ('1', '张三', '2', '李四'); # 将列表中的值赋给hash
%IDForName = ('1'=>'张三', '2'=>'李四'); # => 相当于逗号,使用上和逗号没有任何区别


@people = ('1', '张三', '2', '李四');
%IDForName = @people; # 将数组中的值赋给hash
@people2 = %IDForName;# 将hash中的值赋给数组


%IDForName2 = %IDForName; # 将一个hash中的值赋给另一个hash


$IDForName{'3'} = '王五'; # 增加
delete $IDForName{'3'}; # 删除
$name = $IDForName{'1'}; # 查找
$IDForName{'1'} = '赵六'; # 修改


@IDs = keys %IDForName; # 返回所有的 key
$IDAmount = keys %IDForName; # 返回 key 的数量


@names = values %IDForName; # 返回所有的 value
$nameAmount = values %IDForName; # 返回 value 的数量


%NameForID = reverse %IDForName; # 交换 key 和 value


# 判断是否存在某个键
if (exists $IDForName{'3'}) {
	print "this key already exists.\n";
}


# 迭代 hash
while(($id, $name) = each %IDForName) {
	print "$id => $name\n";
}


# 先对 key 按字符串排序排序后迭代 hash
foreach $id (sort keys %IDForName) {
	$name = $IDForName{$id};
	print "$id => $name\n";
}


# 先对 key 按数字排序排序后迭代 hash
foreach $id (sort{$a<=>$b} keys %IDForName) {
	$name = $IDForName{$id};
	print "$id => $name\n";
}

%ENV 是一个内置的 hash,我们可以通过它来得到系统的环境变量,如 PATH,$ENV{PATH}。

-- 更多参见:Perl 精萃

-- 声 明:转载请注明出处
-- Last Updated on 2012-06-29
-- Written by ShangBo on 2012-06-29
-- End

抱歉!评论已关闭.