我有2个要从其创建哈希的字符串,first_string的值将是key,第二个脚本的值将是key。以下是2个不同的字符串数据。
First Second
PY AB
CH BC
QQ CD
TD EF
TD IG
TD IH
TD RD
TD GD
ES SE
HI VG
HI NH
从这些数据中,PY将是关键,并且其值将是AB,对于所有这些类似。
但是我想为单个键处理特殊情况,我们有多个值,例如TD它有多个值,因为我想创建一个数组
喜欢
TD =[EF,IG,IH]
对于我们将遇到这种情况的所有情况类似
您能否建议我们如何在Perl中处理此案?
答案 0 :(得分:1)
您可以使用数组存储键的所有值,以下是演示程序。
use Data::Dumper;
my @key = qw/PY CH QQ TD TD TD TD TD ES HI HI/;
my @val = qw/AB BC CD EF IG IH RD GD SE VG NH/;
my $hash = {};
for (0..$#key) {
push @{$hash->{$key[$_]}}, $val[$_];
}
print Dumper $hash;
让我们运行它以查看输出:
$VAR1 = {
'HI' => [
'VG',
'NH'
],
'QQ' => [
'CD'
],
'TD' => [
'EF',
'IG',
'IH',
'RD',
'GD'
],
'PY' => [
'AB'
],
'ES' => [
'SE'
],
'CH' => [
'BC'
]
};
答案 1 :(得分:1)
使用单线的另一个Perl
perl -ne ' ($x,$y)=/(\S+)\s+(\S+)/; if( exists($kv{$x})) { @t=@{$kv{$x}}; push(@t,$y);$kv{$x}=[@t] } else { $kv{$x}=[$y]} ; END { foreach(keys %kv) { if(ref($kv{$_}) eq "ARRAY" ) { print "$_ => @{$kv{$_}}\n" } else { print "$_ ->$kv{$_}\n" } }}' dev.txt
输出
HI => VG NH
QQ => CD
TD => EF IG IH RD GD
PY => AB
ES => SE
CH => BC
答案 2 :(得分:0)
逐行遍历文件。对于每个值,将其推入哈希图中的数组。哈希图由您的键值确定键。
此行push @{$hashref->{$key}}, $value;
如果键已存在于映射中,则将值推入与该键关联的数组。如果不是,则使用该值初始化数组,然后使用该键初始化地图。
my $hashref;
while(<>){
chomp;
my ($key, $value) = split;
push @{$hashref->{$key}}, $value;
}