1

私は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
4

3 に答える 3

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
于 2012-07-12T18:13:37.130 に答える
1

入力データの各行が文字列であると仮定すると、定義により一意のキーを持つハッシュを使用します。

キーがハッシュに存在する場合は、値を配列参照にプッシュします。存在しない場合は、値を持つキーに配列参照を割り当てます。次にそのキーが表示されたら、その値を arrayref にプッシュします。

my $hash = {};

foreach my $line ( @lines ) {
     my ($key, $val) = split(/\s/, $line);

     if( $hash->{$key} ) {
         push( @{ $hash->{ $key } }, $val );
     }
     else {
         $hash->{$key} = [ $val ];
     }
}
于 2012-07-12T18:10:04.833 に答える
-1

ワンライナーの使用:

$ 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)
于 2012-07-12T22:11:14.150 に答える