我是 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
我是 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
您可以将数据存储在数组哈希结构 ( 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
假设输入数据中的每一行都在一个字符串中,请使用根据定义具有唯一键的散列。
如果散列中存在键,则将值推送到 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 ];
}
}
使用单线:
$ 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)