我是perl的新手。我想以下列方式存储与键对应的值。请参阅下面的输入数据示例。有人可以帮我在perl中这样做。
输出:
key value
1 (11, 20)
2 (17, 15)
3 (10, 11)
输入数据:
key value
2 17
3 10
1 11
1 20
2 15
3 11
答案 0 :(得分:4)
您可以将数据存储在数组哈希结构(perldoc perldsc)中:
use warnings;
use strict;
use Data::Dumper;
$Data::Dumper::Sortkeys = 1;
my %data;
while (<DATA>) {
my ($k, $v) = split;
push @{ $data{$k} } , $v;
}
print Dumper(\%data);
=for output
$VAR1 = {
'1' => [
'11',
'20'
],
'2' => [
'17',
'15'
],
'3' => [
'10',
'11'
]
};
=cut
__DATA__
2 17
3 10
1 11
1 20
2 15
3 11
答案 1 :(得分:1)
假设输入数据中的每一行都在 一个字符串,根据定义使用具有唯一键的哈希。
如果哈希中存在密钥,则将值推送到arrayref上。 如果它不存在,则为该键分配一个数组引用 值。下次出现该键时,您将把值推送到arrayref。
my $hash = {};
foreach my $line ( @lines ) {
my ($key, $val) = split(/\s/, $line);
if( $hash->{$key} ) {
push( @{ $hash->{ $key } }, $val );
}
else {
$hash->{$key} = [ $val ];
}
}
答案 2 :(得分:-1)
使用oneliner:
$ echo "key value
2 17
3 10
1 11
1 20
2 15
3 11" | perl -anE'next if 1..1;push@{$h{$F[0]}},$F[1]}{say"key value";$"=", ";say"$_ (@{$h{$_}})"for sort{$a<=>$b}keys%h'
key value
1 (11, 20)
2 (17, 15)
3 (10, 11)