zoukankan      html  css  js  c++  java
  • 9.2 数组的散列

    9.2 数组的散列
    
    9.2.1 数组的散列的组成
    
    Vsftp:/root/perl/6# cat a1.pl 
    %HoA = (
    flintstones => [ "fred", "barney" ],
    jetsons => [ "george", "jane", "elroy" ],
    simpsons => [ "homer", "marge", "bart" ],
    );
    
    print %HoA;
    print "
    ";
    Vsftp:/root/perl/6# perl a1.pl 
    simpsonsARRAY(0x1e7c580)jetsonsARRAY(0x1e7c358)flintstonesARRAY(0x1e60d48
    要向散列增加另外一个数组,你可以简单地说:
    
    Vsftp:/root/perl/6# cat a1.pl 
    %HoA = (
    flintstones => [ "fred", "barney" ],
    jetsons => [ "george", "jane", "elroy" ],
    simpsons => [ "homer", "marge", "bart" ],
    );
    
    print %HoA;
    print "
    ";
    $HoA{teletubbies} = [ "tinky winky", "dipsy", "laa-laa", "po" ];
    print %HoA;
    print "
    ";
    Vsftp:/root/perl/6# perl a1.pl 
    simpsonsARRAY(0x22fc628)jetsonsARRAY(0x22fc358)flintstonesARRAY(0x22e0d48)
    simpsonsARRAY(0x22fc628)teletubbiesARRAY(0x22fc340)jetsonsARRAY(0x22fc358)flintstonesARRAY(0x22e0d48)
    
    
    9.2.2 生成数组的散列
    
    
    下面是填充一个数组的散列的技巧,从下面格式的文件中读取出来:
    
    Vsftp:/root/perl/6# cat aa
    flintsotnes: fred barney wilma dino
    jetsons: george jane elroy
    simpsons: homer marge bart
    Vsftp:/root/perl/6# cat a2.pl 
    open (A,aa);
    while (<A>){
    my @arr=();
    my @arr= (split(/:/,$_))[1];
    my $str= (split(/:/,$_))[0];
     $HoA{$str}=[@arr];
    };
    
    print %HoA;
    print "
    ";
    
    Vsftp:/root/perl/6# perl a2.pl 
    simpsonsARRAY(0x1c05628)jetsonsARRAY(0x1be9b98)flintsotnesARRAY(0x1be9d48)
    
    Vsftp:/root/perl/6# cat a2.pl 
    open (A,aa);
    while (<A>){
    my @arr=();
    my @arr= (split(/:/,$_))[1];
    my $str= (split(/:/,$_))[0];
     $HoA{$str}=[@arr];
    };
    
    print %HoA;
    print "
    ";
    print @{$HoA{flintsotnes}};
    print "
    ";
    Vsftp:/root/perl/6# perl a2.pl 
    simpsonsARRAY(0x2610670)jetsonsARRAY(0x25f4b98)flintsotnesARRAY(0x25f4d48)
     fred barney wilma dino
    
    
    
    Vsftp:/root/perl/6# cat a2.pl 
    open (A,aa);
    while (<A>){
    my @arr=();
    my @arr= (split(/:/,$_))[1];
    my $str= (split(/:/,$_))[0];
     $HoA{$str}=[@arr];
    };
    
    print %HoA;
    print "
    ";
    print @{$HoA{flintsotnes}};
    print "
    ";
    
    
    
    Vsftp:/root/perl/6# cat a2.pl 
    open (A,aa);
    while (<A>){
    my @arr=();
    my @arr= (split(/:/,$_))[1];
    my $str= (split(/:/,$_))[0];
     $HoA{$str}=[@arr];
    };
    
    print %HoA;
    print "
    ";
    print @{$HoA{flintsotnes}};
    print "
    ";
    
    
    for $group ( "simpsons", "jetsons", "flintstones" ) {
    @members = get_family($group);
    $HoA{$group} = [ @members ];
    };
    print %HoA;
    print "
    ";
    print @{$HoA{flintstones}};
    print "
    ";
    
    sub get_family(){
         my $a=shift;
         return @arr=("$a".11,"$a".22,"$a".33);
     };
    Vsftp:/root/perl/6# perl a2.pl 
    simpsonsARRAY(0xa3b3c0)jetsonsARRAY(0xa13b98)flintsotnesARRAY(0xa13d48)
     fred barney wilma dino
    
    simpsonsARRAY(0xa3b5d0)flintstonesARRAY(0xa3b6c0)jetsonsARRAY(0xa3b690)flintsotnesARRAY(0xa13d48)
    flintstones11flintstones22flintstones33
    
    
    9.2.3 访问和打印数组的散列  
    
    
    你可以用下面的方法设置某一个数组的第一个元素:
    
    Vsftp:/root/perl/6# perl a1.pl 
    11111111111111111
    fred
    Vsftp:/root/perl/6# cat a1.pl 
    %HoA = (
    flintstones => [ "fred", "barney" ],
    jetsons => [ "george", "jane", "elroy" ],
    simpsons => [ "homer", "marge", "bart" ],
    );
    
    $HoA{teletubbies} = [ "tinky winky", "dipsy", "laa-laa", "po" ];
    
    print "11111111111111111
    ";
    print $HoA{flintstones}[0]; 
    print "
    ";
    Vsftp:/root/perl/6# perl a1.pl 
    11111111111111111
    fred
    
    
    Vsftp:/root/perl/6# cat a1.pl 
    %HoA = (
    flintstones => [ "fred", "barney" ],
    jetsons => [ "george", "jane", "elroy" ],
    simpsons => [ "homer", "marge", "bart" ],
    );
    
    $HoA{teletubbies} = [ "tinky winky", "dipsy", "laa-laa", "po" ];
    
    print "11111111111111111
    ";
    print @{$HoA{flintstones}};
    print "
    ";
    $HoA{flintstones}[0] = "Fred";
    print @{$HoA{flintstones}};
    print "
    ";
    Vsftp:/root/perl/6# perl a1.pl 
    11111111111111111
    fredbarney
    Fredbarney
    
    
    
    打印所有这些数组,方法是遍历散列的所有键值:
    
    %HoA = (
    flintstones => [ "fred", "barney" ],
    jetsons => [ "george", "jane", "elroy" ],
    simpsons => [ "homer", "marge", "bart" ],
    );
    
    $HoA{teletubbies} = [ "tinky winky", "dipsy", "laa-laa", "po" ];
    
    print %HoA;
    print "
    ";
    
    for $family ( keys %HoA ){
        print "$family: @{ $HoA{$family} }
    ";
    }
    ~  
    
    
    Vsftp:/root/perl/6# cat a1.pl 
    %HoA = (
    flintstones => [ "fred", "barney" ],
    jetsons => [ "george", "jane", "elroy" ],
    simpsons => [ "homer", "marge", "bart" ],
    );
    
    $HoA{teletubbies} = [ "tinky winky", "dipsy", "laa-laa", "po" ];
    
    print %HoA;
    print "
    ";
    for $family ( keys %HoA ) {
    print "$family: ";
    for $i ( 0 .. $#{ $HoA{$family} }) {
    print " $i = $HoA{$family}[$i]";
    }
    print "
    ";
    }
    print %HoA;
    print "
    ";
    Vsftp:/root/perl/6# perl a1.pl 
    simpsonsARRAY(0xde4a68)teletubbiesARRAY(0xdd9340)jetsonsARRAY(0xdd9358)flintstonesARRAY(0xdbdd48)
    simpsons:  0 = homer 1 = marge 2 = bart
    teletubbies:  0 = tinky winky 1 = dipsy 2 = laa-laa 3 = po
    jetsons:  0 = george 1 = jane 2 = elroy
    flintstones:  0 = fred 1 = barney
    simpsonsARRAY(0xde4a68)teletubbiesARRAY(0xdd9340)jetsonsARRAY(0xdd9358)flintstonesARRAY(0xdbdd48)
    

  • 相关阅读:
    .Net常识 值类型和引用类型
    .net 开发人员的瓶颈和职业发展
    PPT Garbage Collection in .Net (内存管理)
    Why Sessionless Web Application ?
    一些.Net面试题 (BS 方向)
    开源一个小类库, 用于对象间灵活的拷贝属性,还有IDataReader到实体类的转换
    在 Visual Studio 单元测试中使用CallContext 导致的 Unit Test Adapter threw exception: Type is not resolved for member... 异常
    【设计原则和建议】 类
    轻量级 Lock Free 线程安全的 Queue<T> 的C#2.0实现
    实验一 命令解释程序的编写
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13350023.html
Copyright © 2011-2022 走看看