2

ハッシュの配列から配列内の各id値をどのようにプッシュしますか?

私はこの配列を持っています:

@friends = [ 
   {'id' => 1, 'last_name' => 'Fo', 'first_name' => 'fa' }, 
   {'id' => 3, 'last_name' => 'pa', 'first_name' => 'pi' }, 
   {'id' => 2, 'last_name' => 'ma', 'first_name' => 'mi' } 
];

push@friend_ids = [1, 3, 2]を使用して、次のような値IDの配列を作成したいと思います。

4

2 に答える 2

10

あなたはおそらく持っていて@friends = ( ... )、望んでい@friend_ids = (1, 3, 2)ます。角括弧は、リストではなく配列参照に使用されます。次のような配列を作成できます。

#!/usr/bin/perl
use warnings;
use strict;

my @friends = ( {id => 1, last_name => 'Fo', first_name => 'fa' },
                {id => 3, last_name => 'pa', first_name => 'pi' },
                {id => 2, last_name => 'ma', first_name => 'mi' } );
my @friend_ids;
push @friend_ids, $_->{id} for @friends;
print "@friend_ids\n";

ただし、プッシュなしで同じことをより簡単に実現できます。

my @friend_ids = map $_->{id}, @friends;

重複を削除してキーをソートする必要がある場合は、次を使用できます。

my @friend_ids = sort {$a <=> $b} uniq map $_->{id}, @friends;

すべての ID が数字または数字のみの場合

my @friend_ids = sort uniq map $_->{id}, @friends;

一部の ID が数値でない場合 ( List::MoreUtilsuniqからのもの)。

于 2012-05-10T19:08:11.990 に答える
2

そのためにハッシュを使用して、重複を削除し、結果を簡単に並べ替えることができるようにします(必要な場合)。

my @friends = ( {id => 1, last_name => 'Fo', first_name => 'fa' },  
                {id => 3, last_name => 'pa', first_name => 'pi' },  
                {id => 2, last_name => 'ma', first_name => 'mi' } );  

my %id = map { $_->{id} => 1 } @friends;
my @friend_ids = sort { $a <=> $b } (keys %id); 
print "@friend_ids\n";

このスクリプトはIdeoneでテストできます。

于 2012-05-10T19:23:31.613 に答える