zoukankan      html  css  js  c++  java
  • Perl HASH数组

    数组的优缺点:
    
    元素内容可由下标直接得到。基址 + 下标 * 元素大小,是访问最快的方法。
    
    
    缺点:
    元素内容与位置无关。
    
    
    
    HASH数组的特点:
    
    1.有的位置可能无值为空,但也要留出空间。浪费空间,换取时间
    
    2.数组内容没有顺序的
    
    3.对查找单个值,比数组通过索引立即找到值慢,多了函数计算。但比链表块,不用从头到尾查一遍。
    
    HASH 数组的形式: %h=('a',1,'b',2);
    
    以%开头,与$h是不同的变量。()为空散列。
    
    关联数组的下标称为关键字key, 由key得到的为值value
    
    
    %h=('a'=>1,'b'=>2);键和值间的逗号可为=>,相当于逗号。
    
    
    %h=(a=>1,b=>2);键的引号可省略,用=>时自动认为是字符窜。
    
    元素形式: $hash{'a'}
    
    元素为简单变量,用$。 key为简单变量类型
    
    $h{2.5}, ${-1},$h{$k}
    
    关联数组的赋值
    
    
    标准: %a=("key1",1,"key2",2);
    
    数组和散列间赋值:%h=@a,散列也是数组。
    
    @a=%h,数组元素的顺序随机。
    
    %h1=%h2
    
    ($a,%h)=@array;
    
    %h=(%first,%second),浪费内存
    
    %h1=(%h2,'k','v'),增加一组键值。必须成对出现。
    
    函数的返回:%h=split();
    
    片断:@keys=('a','b','c');
    
    @hash{@keys}=@hash{reverse(@keys)}
    
    @不能改为$,因为$hash{}中key要求是简单变量,@keys=3,成了$hash{3}
    
    元素赋值与操作:
    
    增加: 赋值$h{'a'}=1,不存在则创建,hash不存在也创建。
    
    删除: delete $h{$k}
    
    不要用push,pop,shift,splice等与顺序有关的函数,否则结果不可知。
    
    
    显示:不能print '%hash";原样打印
    
       print %hash 显示无空格。
    
    用遍历的方法来逐一显示。
    
    当$a=%h时,显示的不是长度,形如x/y。表示散列长度为y,已经有值的元素是x个
    
    
    
    HASH 数组操作函数
    
    Keys(%h),values(%h);
    
    用keys(%h)返回键列表,values(%h)返回值列表来显示。
    
    返回的元素无顺序
    
    each(%h) 循环
    
    ($key,$value)=each(%hash) 取出键值对。
    
    不要先keys返回键,再$hash($k)返回值,效率不高。
    
    循环中不要增加或删除元素,因为散列是无序的。最后返回undef
    
    Exists 关键字是否存在:exists $h{'key'}
    
    Undef(%h):删除散列,相当于 %=();
    
    
    关联数组模拟数据结构
    
    
    1.链表
    
    每项含内容和指向下一个元素的指针,头指针指向第一个元素。
    
    %list=("a","b",
            "b","c",
            "c","");
    
    $header="a";
    
    2.结构
    
    struct{int i,int j}s;s.i=1;=>%s=("i","","j","");$s{"i"}=1;
    
    
    $aoh->[0]{'k11'}
    
    访问引用指向它的元素
    
    
    HASH数组是一种数组
    
    可以与数组相互赋值。 %h=@a,@a=%h,%h1=%h2
    
    (%h,'k','v') 可以出现在=左边或右边
    
    片断: $h{'a','b'}
    
    HASH 数组是特殊的数组
    
    %,{}
    
    key=>value, 成对出现,不成对不能赋值。
    
    不能"%hash"
    
    显示为2/8 (用了多少)
    
    关联数组是无序的
    
    
    [oracle@jhoa 13]$ cat 1.pl 
    #!/usr/bin/perl
    %h=(a=>1,b=>3);
    print "%h
    ";
    print %h;
    
    $a=%h;
    print "
    $a
    "; ##分配了8个值对的空间,已经用了2个
    
    $aoh=[{'k11'=>'v11','k12'=>'v12'},
    {'k21'=>'v21','k22'=>'v22'}];
    $hash=$aoh->[0];
    print "@{[%$hash]}
    ";
    
    $hoh={k1=>
    {key1=>'value1',key2=>'value2'},
          k2=>{key1=>'val1',key2=>'val2'}
    };
    print "$hoh->{k1}{key1}
    ";
    print "@{$hoh->{k1}}{'key1','key2'}";
    
    
    [oracle@jhoa 13]$ perl 1.pl 
    %h
    a1b3
    2/8
    k11 v11 k12 v12
    value1
    value1 value2[oracle@jhoa 13]$ 
    

  • 相关阅读:
    测试攻城狮必备技能点!一文带你解读DevOps下的测试技术
    华为云FusionInsight MRS:助力企业构建“一企一湖,一城一湖”
    浅谈Delphi过程与函数02 零基础入门学习Delphi21
    浅谈Delphi过程与函数01 零基础入门学习Delphi20
    浅谈Delphi过程与函数02 零基础入门学习Delphi21
    使用MASM07 Win32汇编语言015
    浅谈Delphi过程与函数01 零基础入门学习Delphi20
    冒泡排序V2.0 零基础入门学习Delphi19
    冒泡排序 零基础入门学习Delphi18
    冒泡排序V2.0 零基础入门学习Delphi19
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13352042.html
Copyright © 2011-2022 走看看