一、数组变量的限制
前面讲到的数组变量中,可以通过下标访问其中的元素,但是它们有显著的缺陷,即很难记住那个元素存住什么内容。
二、定义
关联数组,哈希表,可以通过任意简单变量值来访问其元素。
为了区分关联数组与普通数组,Perl使用%作为其首字符,而数组变量以@大头。
与其他变量名一样,%后第一个字符必须是字母,后续字符可以为字母、数字或者下划线。
三、增加元素
创建一个关联数组最简单的方法是复制,$fruit{'banana'} = 1;
这一特性使得关联数组很容易用于计数。
四、创建关联数组
可以用单个赋值语句创建关联数组
%fruit = ("apples",17,"bananas",9,"oranges","none");
%fruit = ("apples"=>17,"bananas"=>9,"oranges"=>"none"); #perl5,可读性更强
五、从数组变量复制到关联数组
@fruit = ("apples",17,"bananas",9,"oranges","none");
%fruit = @fruit;
反之,
%fruit = ("grapes",11,"lemons",27);
@fruit = %fruit;
六、元素的增删
$fruit{"lime"} = 1;
delete ($fruit{"lime"});
注意,
1. 一定要使用delete函数删除关联数组的元素,这是唯一的方法;
2. 一定不要对关联数组使用内嵌函数push pop shift splice,因为元素的位置是随机的。
七、列出数组的索引和值
keys()函数返回关联数组下标的列表
%fruit = ("apples", 9, "bananas", 23, "cherries", 11); @fruitsubs = keys(%fruits);
@fruitvalues = values(%fruits);
内嵌函数values()返回关联数组值的列表
PS:因为元素位置随机,所以值得次序可能不同。
八、用关联数组循环
foreach $holder (keys(%records)){
$record = $records{$holder};
}
%records = ("Maris", 61, "Aaron", 755, "Young", 511);
while (($holder, $record) = each(%records)) { #下标,值
# stuff goes here
}
九、用关联数组创建数据结构
1. 单链表
%words = ("abel", "baker",
"baker", "charlie", "charlie", "delta", "delta", ""); $header = "abel";
2. 结构
struce{
int field1;
int field2;
int field3; }mystructvar;
%mystructvar = ("field1" , "" ,
"field2" , "" ,
"field3" , "" ,);
3. 树
- 因为每个子节点均为一个树,所以左/右子节点也称为左/右子树。(有时称左/右分支)
- 第一个节点(不是任何节点的子节点的节点)称为树的根。
- 没有孩子(子节点)的节点称为叶节点。