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

时间:2012-07-12 17:59:10

标签: 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

3 个答案:

答案 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)