Perl语言入门--5--散列、hash

                                    hash

一、关联数组的形式

  %h=('a',1,'b',2); a是key 1是value b是key 2是value

    以%开头,()为空散列

  %h=('a'=>1,'b'=>2); 更明显一些 用这个还可以省略引号 但默认全部都是字符串 当有数字的时候就不是你的本意了

  元素形式:$h{'a'} #注意用$

  元素为简单变量,用$。 %h{2.5} %{-1} ${$ee} 都是可以的 小数 负数 简单变量都可以是key

二、 关联数组的赋值

  1、标准: %a=('a',1,'b',2);

  2、数组与散列间赋值:%h=@a 散列也是数组 只是没有顺序

  3、@a=%h 数组元素的顺序随机

  4、($a,%h)=@array #不太会用 先把数组的第一个值放进简单变量$a中 再把剩下的放进散列%h中 ,所以@array的个数必须是奇数

  5、%h=(%first,%second) #浪费内存

  6、%h1=(%h2,'k','v') #增加一组键值,必须成对出现

  7、函数的返回,比如split()的返回结果,也可以赋值给散列:

          %h=split(/,/,'a,b,c,d')

  8、片段:@key=('a','b','c')

       @hash{@keys}=@hash{reverse(@keys)}

        #注意@不能改为$,因$hash{}中key要求是简单变量,所以括号里面是一个数

                 而现在我想圈出一个数组,所以前面要变为@,括号里面也是@

                 都应该前后对应

                 如果你输入 $hash{@keys} 因为$hash大括号中的key要求是简单变量 这等同于 $hash{@keys的长度} 也就是@hash{3}

三、 元素赋值与操作

  1、增加: $h{'a'} = 1 不存在则创建,hash不存在也创建

  2、删除:delete $h{'a'}

  3、不要用push pop shift splice 等与顺序有关的函数,否则结果不可知

  4、显示:不能 print "%hash"; 这样输出的只是字符串:%hash

       如用 print %hash 则显示无空格

       用遍历的方法来逐一显示

  5、$a=%hash $a被赋值为x x是已有的元素数/分配的内存数 没什么卵用

四、关联数组操作函数

  key(%h) 或 key %h #返回键列表

  value(%h) 或 value %h    #返回值列表

  

  each(%h)循环:  ($key,$value)=each(%hash)

      循环中不要增加或删除元素,因为散列是无序的。循环的最后返回undef

  exist:查看关键字是否存在

      exist $h{'key'}

  undef(%h) : 删除散列 相当于%=()

  delete