zoukankan      html  css  js  c++  java
  • 第9章 数据结构

    9.1.1 创建和访问一个两维数组
    
    [root@wx03 4]# cat a1.pl 
    @Aoa = (
    ["fred", "barney" ],
    ["george", "jane", "elroy" ],
    ["homer", "marge", "bart" ],
    );
    print $Aoa[0]->[1];
    print "
    ";
    [root@wx03 4]# perl a1.pl 
    barney
    
    
    $Aoa[0]->[1]; [0]表示第一个元素,->[1]表示数组引用的第2个元素
    
    请注意 $array[3] 和 $array->[3] 是不一样的。第一个东西讲的是 @array 里的第四个元素, 而第二个东西讲  
    的是一个保存在 $array 里的数组(可能是匿名的数组)引用的第四个元素。
    
    [root@wx03 4]# cat a2.pl 
    $ref_to_AoA = [
    [ "fred", "barney674128462", "pebbles", "bamm bamm", "dino", ],
    [ "homer", "bart", "marge", "maggie", ],
    [ "george", "jane", "elroy", "judy", ],
    ];
    
    print $ref_to_AoA->[0]->[1];
    print "
    ";
    [root@wx03 4]# perl a2.pl 
    barney674128462
    
    请记住在每一对相邻的花括弧或方括弧之间有一个隐含的 ->。因此下面两行:
    
    [root@wx03 4]# cat tmp.out 
    a b56757 c 
    e f g
    o p q
    r s t
    
    [root@wx03 4]# cat a3.pl 
    open (LOG ,"<","tmp.out");  
           while (<LOG>) { 
           @tmp = split;
    push @AoA,[@tmp];
    };
    use Data::Dumper;
    $str=Dumper(@AoA);
    
    print @AoA;
    print "
    "; 
    print  $str;
    print "
    ";
    print $AoA[0][1];
    print "
    ";
    
    
    
    [root@wx03 4]# perl a3.pl 
    ARRAY(0xf12338)ARRAY(0xf12410)ARRAY(0xf12cf8)ARRAY(0xf20088)ARRAY(0xefe160)
    $VAR1 = [
              'a',
              'b56757',
              'c'
            ];
    $VAR2 = [
              'e',
              'f',
              'g'
            ];
    $VAR3 = [
              'o',
              'p',
              'q'
            ];
    $VAR4 = [
              'r',
              's',
              't'
            ];
    $VAR5 = [];
    
    b56757
    
    
    [root@wx03 4]# cat a4.pl 
    sub func{
      $a=shift;
      $b=shift;
    return $a + $b;
    };
    
      
    
    
    
    for $x (0..3){ # 对每一行...
    for $y (0..3) { # 对每一列...
    $AoA[$x][$y] = func($x, $y); # ...设置调用
    }
    };
    print @AoA;
    use Data::Dumper;
    $str=Dumper(@AoA);
    print "$str is $str
    ";
    [root@wx03 4]# perl a4.pl 
    ARRAY(0xec3368)ARRAY(0xec3488)ARRAY(0xed0158)ARRAY(0xee4d10)$str is $VAR1 = [
              0,
              1,
              2,
              3
            ];
    $VAR2 = [
              1,
              2,
              3,
              4
            ];
    $VAR3 = [
              2,
              3,
              4,
              5
            ];
    $VAR4 = [
              3,
              4,
              5,
              6
            ];
    
    
    
    
    for $i (1..10) {
    @array = ($i,$i+1,$i+2);
    $AoA[$i] = [ @array ]; 
    };
    print @AoA;
    ~            
    
    $AoA[$i] = [ @array ];  ##数组的每个元素是一个数组引用
    
    
    
    [root@wx03 4]# cat a5.pl 
    for $i (1..3) {
    @array = ($i,$i+1,$i+2);
    $AoA[$i] = [ @array ]; # 错误!
    };
    print @AoA;
    use Data::Dumper;
    $str=Dumper(@AoA);
    print "$str is $str
    ";
    [root@wx03 4]# perl a5.pl 
    ARRAY(0xe7f368)ARRAY(0xe7f4a0)ARRAY(0xe8d0b8)$str is $VAR1 = undef;
    $VAR2 = [
              1,
              2,
              3
            ];
    $VAR3 = [
              2,
              3,
              4
            ];
    $VAR4 = [
              3,
              4,
              5
            ];
    
    
    9.2 数组的散列
    
    
    [root@wx03 4]# cat a6.pl 
    %HoA = (
    flintstones => [ "fred", "barney" ],
    jetsons => [ "george", "jane", "elroy" ],
    simpsons => [ "homer", "marge", "bart" ],
    );
    print $HoA{flintstones}->[1];
    print "
    ";
    ##添加元素
    #
    $HoA{test}=['a','b'];
    print %HoA;
    print "
    ";
    
    [root@wx03 4]# perl a6.pl 
    barney
    flintstonesARRAY(0xfb0160)jetsonsARRAY(0xfc4368)simpsonsARRAY(0xfc44b8)testARRAY(0xfc4338)
    
    
    
    [root@wx03 4]# cat a7.pl 
    open (LOG ,"<","t1.out");
    while ( $line = <LOG> ) {
    ($who, $rest) = split /:S*/, $line, 2;
    print "$who is $who
    ";
    print "$rest is $rest
    ";
    @fields = split /s+/, $rest;
    $HoA{$who} = [ @fields ];
    };
    print %HoA;
    print "
    ";
    
    
    
    [root@wx03 4]# cat a7.pl 
    open (LOG ,"<","t1.out");
    @fields=();
    while ( $line = <LOG> ) {
    ($who, $rest) = split /:S*/, $line, 2;
    print "$who is $who
    ";
    print "$rest is $rest
    ";
    @fields = split /#/, $rest;
    print "@fields is @fields
    ";
    $HoA{$who} = [ @fields ];
    };
    print %HoA;
    print "
    ";
    
    use Data::Dumper;
    $str=Dumper(%HoA);
    print "$str is $str
    ";
    
    print $HoA{flintsotnes}->[1];
    print "
    ";
    [root@wx03 4]# perl a7.pl 
    $who is flintsotnes
    $rest is  fred#barney#wilma#dino
    
    @fields is  fred barney wilma dino
    
    $who is jetsons
    $rest is  george#jane#elroy
    
    @fields is  george jane elroy
    
    $who is simpsons
    $rest is  homer#marge#bart
    
    @fields is  homer marge bart
    
    simpsonsARRAY(0x2297668)flintsotnesARRAY(0x228a368)jetsonsARRAY(0x228a338)
    $str is $VAR1 = 'simpsons';
    $VAR2 = [
              ' homer',
              'marge',
              'bart
    '
            ];
    $VAR3 = 'flintsotnes';
    $VAR4 = [
              ' fred',
              'barney',
              'wilma',
              'dino
    '
            ];
    $VAR5 = 'jetsons';
    $VAR6 = [
              ' george',
              'jane',
              'elroy
    '
            ];
    
    barney
    
    
    [root@wx03 4]# perl a7.pl 
    $who is flintsotnes
    $rest is  fred barney wilma dino
    
    $who is jetsons
    $rest is  george jane elroy
    
    $who is simpsons
    $rest is  homer marge bart
    
    flintsotnesARRAY(0x1c0a350)simpsonsARRAY(0x1c17d50)jetsonsARRAY(0x1c0a368)
    
    散列的数组:
    
    [root@wx03 4]# cat a8.pl 
    @AoH = (
    {
    husband => "barney",
    wife => "betty",
    son => "bamm bamm",
    },
    {
    husband => "george",
    wife => "jane",
    son => "elroy",
    },
    {
    husband => "homer",
    wife => "marge",
    son => "bart",
    },
    );
    print $AoH[0]->{wife};
    print "
    ";
    [root@wx03 4]# perl a8.pl 
    betty
    
    
    生产散列的数组:
    [root@wx03 4]# cat t1.pl 
    open (LOG ,"<","t2.out");
    while (<LOG>) {
    $rec = {};
    for $field ( split ) {
    ($key, $value) = split /=/, $field;
    $rec->{$key} = $value;
    }
    push @AoH, $rec;
    }
    print @AoH;
    print "
    ";
    use Data::Dumper;
    $str=Dumper(@AoH);
    print "$str is $str
    ";
    [root@wx03 4]# cat t2.out 
    husband=fred 
    friend=barney
    [root@wx03 4]# perl t1.pl 
    HASH(0x1e82160)HASH(0x1e96338)
    $str is $VAR1 = {
              'husband' => 'fred'
            };
    $VAR2 = {
              'friend' => 'barney'
            };
    
    9.4 散列的散列:
    
    9.4.1 构成一个散列的散列
    [root@wx03 4]# cat t2.pl 
    %HoH = (
    flintstones => {
    husband => "fred",
    pal => "barney",
    },
    jetsons => {
    husband => "george",
    wife => "jane",
    "his boy" => "elroy", # 键字需要引号
    },
    simpsons => {
    husband => "homer",
    wife => "marge",
    kid => "bart",
    },
    );
    
    print $HoH{flintstones}->{pal};
    print "
    ";
    [root@wx03 4]# perl t2.pl 
    barney
    
    9.4.2 生成散列的散列
    下面
    [root@wx03 4]# cat t3.pl 
    open (LOG ,"<","t3.out");
    while( <LOG> ){
    $who = flintstones;
    for $field ( split ) {
    ($key, $value) = split /=/, $field;
    $HoH{$who}{$key} = $value;
    }
    };
    print %HoH;
    use Data::Dumper;
    $str=Dumper(%HoH);
    print "$str is $str
    ";
    print $HoH{flintstones}{wife};
    print "
    ";
    
    [root@wx03 4]# cat t3.out 
    husband=fred 
    pal=barney 
    wife=wilma 
    pet=dino
    [root@wx03 4]# perl t3.pl 
    flintstonesHASH(0xb6e320)$str is $VAR1 = 'flintstones';
    $VAR2 = {
              'pal' => 'barney',
              'husband' => 'fred',
              'pet' => 'dino',
              'wife' => 'wilma'
            };
    
    wilma
    
    9.5 函数的散列
    %HoF = ( # Compose a hash of functions
    exit => sub { exit },
    help => &show_help,
    watch => sub { $watch = 1 },
    mail => sub { mail_msg($msg) },
    edit => sub { $edited++; editmsg($msg); },
    delete => &confirm_kill,
    );
    

  • 相关阅读:
    odoo10 按钮点击时的弹窗提示确认消息
    odoo10 行表创建新数据时默认取值
    odoo10 关于ODOOsearch视图
    odoo10 many2one字段下拉更多选项时自定义排序方法
    变量的注释(python3.6以后的功能)
    蓝图的使用
    线程
    基础总结1
    请求上下文和应用上下文
    flask-script扩展
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13350791.html
Copyright © 2011-2022 走看看