在perl中存储与唯一键对应的值

在perl中存储与唯一键对应的值,perl,Perl,我是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 假设输入数据中的每一行都在 字符串,使用定义为唯一键的哈希 如果散列中存在该键,则将该值推送到arrayref上。 如果它不存在,则使用 价值下次出现该键时,

我是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

假设输入数据中的每一行都在 字符串,使用定义为唯一键的哈希

如果散列中存在该键,则将该值推送到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 ];
     }
}

假设输入数据中的每一行都在 字符串,使用定义为唯一键的哈希

如果散列中存在该键,则将该值推送到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 ];
     }
}

您可以将数据存储在数组散列结构()中:

使用警告;
严格使用;
使用数据::转储程序;
$Data::Dumper::Sortkeys=1;
我的%数据;
而(){
我的($k,$v)=分割;
推送{$data{$k},$v;
}
打印转储程序(\%数据);
=用于输出
$VAR1={
'1' => [
'11',
'20'
],
'2' => [
'17',
'15'
],
'3' => [
'10',
'11'
]
};
=切割
__资料__
2    17
3    10
1    11 
1    20
2    15
3    11

您可以将数据存储在数组散列结构()中:

使用警告;
严格使用;
使用数据::转储程序;
$Data::Dumper::Sortkeys=1;
我的%数据;
而(){
我的($k,$v)=分割;
推送{$data{$k},$v;
}
打印转储程序(\%数据);
=用于输出
$VAR1={
'1' => [
'11',
'20'
],
'2' => [
'17',
'15'
],
'3' => [
'10',
'11'
]
};
=切割
__资料__
2    17
3    10
1    11 
1    20
2    15
3    11
使用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)
$echo”键值
2    17
3    10
1    11 
1   20
2    15
3 11“| perl-anE”下一个,如果1..1;为排序{$a$b}键%h'推送{$h{$F[0]},$F[1]}{say“key value”;$“=”,“say“$”({$h{$})”
关键值
1  (11, 20)
2  (17, 15)
3  (10, 11)
使用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)
$echo”键值
2    17
3    10
1    11 
1   20
2    15
3 11“| perl-anE'next if 1..1;push{$h{$F[0]},$F[1]}{表示“键值”;$“=”,“表示排序{$a$b}键%h的“$”({$h{$})”
关键值
1  (11, 20)
2  (17, 15)
3  (10, 11)

谢谢。数据在一个文本文件中。我是否需要放置@line。请让我知道。看起来您使用的是toolic上面使用的部件。请将foreach行替换为while(){line。你不必用else块创建数组。Autovification会处理它。谢谢。数据在一个文本文件中。我需要把@line放在哪里?请告诉我。看起来你使用了toolic上面使用的部分。用while()替换foreach行{line。您不必使用else块创建数组。Autovivification会处理它。