关联数组/哈希表

一、数组变量的限制

  前面讲到的数组变量中,可以通过下标访问其中的元素,但是它们有显著的缺陷,即很难记住那个元素存住什么内容。

二、定义

  关联数组,哈希表,可以通过任意简单变量值来访问其元素。

  为了区分关联数组与普通数组,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. 树

  • 因为每个子节点均为一个树,所以左/右子节点也称为左/右子树。(有时称左/右分支)
  • 第一个节点(不是任何节点的子节点的节点)称为树的根。
  • 没有孩子(子节点)的节点称为叶节点。
原文地址:https://www.cnblogs.com/yiyi-xuechen/p/4421946.html