SS *_*gde 1 perl perl-data-structures
我有一个阵列.数组中的元素在它们之间包含半冒号.
数组看起来像这样:
@Array = { "AUT;E;1",
"AUT;E;2",
"CHE;A;1",
"CHE;C;4"
};
Run Code Online (Sandbox Code Playgroud)
我想用';'分割数组元素 (分号)作为分隔符.
通过使用散列哈希,我想将'AUT'存储为键,并且希望存储E => 1且E => 2.
即我需要哈希作为
%HashOfElem = (
'AUT' => {
'E' => 1,
'E' => 2
},
'CHE' => {
'A' => 1,
'C' => 4
}
)
Run Code Online (Sandbox Code Playgroud)
为此,我编写了以下代码,其行为不符合预期:(
foreach(@Array)
{
my @TmpArray = split(/;/,$_);
%HashOfElem = (
$TmpArray[0] => {
$TmpArray[1] => $TmpArray[2]
}
);
Run Code Online (Sandbox Code Playgroud)
}
如果我的方法是错误的,那么perl中的哪个数据结构可用于实现上述目的?
请帮忙..
请注意,你对@Array做错了,它应该是(括号而不是括号):
根据评论更新:
my @array = (
"AUT;E;1",
"AUT;E;2",
"CHE;A;1",
"CHE;C;4"
);
Run Code Online (Sandbox Code Playgroud)
所以你的脚本变成:
my @array = (
"AUT;E;1",
"AUT;E;2",
"AUT;E;2",
"CHE;A;1",
"CHE;C;4"
);
my %hash;
my %dups;
foreach (@array) {
next if exists $dups{$_}; # skip this line if already stored
$dups{$_} = 1;
my @tmp = split/;/;
push @{$hash{$tmp[0]}{$tmp[1]}}, $tmp[2];
}
say Dumper\%hash;
Run Code Online (Sandbox Code Playgroud)
输出:
$VAR1 = {
'CHE' => {
'A' => [
'1'
],
'C' => [
'4'
]
},
'AUT' => {
'E' => [
'1',
'2'
]
}
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
326 次 |
| 最近记录: |