美文网首页
[perl] perl 中二维哈希hash 与python 二维

[perl] perl 中二维哈希hash 与python 二维

作者: Silver_42ac | 来源:发表于2020-05-30 11:27 被阅读0次

    perl 中 hash 与python 中dict 形式似乎一样,不过perl 中为一维hash ,默认是不支持二维字典的,需要借用 reference 来实现;剧透下(reference 可以理解为内存地址,就是二维字典里value 存放的内存位置,利用解引用来获得)

    (1)首先,python 中存储和读取二维字典dict;则是利用嵌套存储字典的方式

    dict_temp = dict()
    key_tmp = "aaa"
    key2_tmp= "bbb"
    dict_temp[key_tmp]=dict()# 设置value 值 为字典
    #dict_temp[key_tmp]={}
    dict_temp[key_tmp][key2_tmp]="value"
    print (dict_temp )
    print (dict_temp[key_tmp] )
    

    输出内容为:

    {'aaa': {'bbb': 'value'}}
    {'bbb': 'value'}
    

    perl 中的使用没有python 方便, 涉及到 二维hash 的 字典,需要说明一种写法;perl 中写法比较多

    $hash{'A'}{'B'} = 'sth';
    

    等效于

     $hash{'A'}->{'B'} = 'sth';
    如果 print  $hash{'A'} 得到的是hashref
    HASH(0x1dd97f0)
    
    ARRAY(0x1dd97f0) 则为 arrayref
    

    已知 key1,想遍历 key2 ;涉及到 解引用 的方法, 其实就是把 hashref(ARRAY(0x1dd97f0))转换为真正的目标内嵌的hash,对于python 的结果 ,获得{'bbb': 'value'} 这个hash

    
    

    补充解法, 将下列符号放在 内容是reference 的变量 前面 就 代表将这个reference 变成这个类型
    % 代表整个 hash 哈希,使用{} 代表 (python dict)
    @ 代表整个 array 数组,使用 [] 代表 (python list)
    $ 代表 一个标量 (python 中普通变量)
    & 代表一个子函数 (python 中 def 函数)

    $reference=$hash['A']   #$hash['A']['B']= 'sth';
    $$reference{'key'};   #取 二维hash 的 value; 平常就是 $hash['A'],$reference 就代表 $hash['A']内容 所以加个$,
    
    my @array;
    my $reference=\@array;  #加\表示 引用,主要用在函数的参数是 数组或 哈希字典时
    $$reference[index];      #平常取数组 元素 就是 $array[index]
    

    另外的 也可以直接用 -> 符号解

    $reference=$hash['A']   #$hash['A']['B']= 'sth';
    $reference->{'key'};   #取 二维hash 的 value
    
    my @array;
    my $reference=\@array;  #加\表示 引用,主要用在函数的参数是 数组或 哈希字典时
    $reference->[index];
    

    补充测试

    my $key1="AA";
    my $key2="BB";
    my $key3="CC";
    my $key4="DD";
    
    my %hash;
    
    $hash{$key1}{$key2}="text1";
    $hash{$key1}{$key3}="text2";
    $hash{$key1}{$key4}="text3";
    
    
    $hash{$key2}{$key1}="A1";
    $hash{$key2}{$key3}="B2";
    $hash{$key2}{$key4}="C3";
    
    
    my $hash_ref=$hash{$key1};
    
    foreach my $el (keys %$hash_ref){
         print "$el\n";
         if($el eq "BB"){print "$hash{$key1}{$el}\n";}
    }
    

    返回内容为:

    CC
    BB
    text1
    DD

    参考:
    Perl中的引用和解引用

    Perl – 遍历二维Hash

    相关文章

      网友评论

          本文标题:[perl] perl 中二维哈希hash 与python 二维

          本文链接:https://www.haomeiwen.com/subject/vmsczhtx.html