美文网首页
[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