2012-04-17 9 views
5

でユニークな要素を数えます。のperl:私はそれで名前の単純な配列を持っている、と私は簡単にそれぞれの名前が表示された回数をプリントアウトできるようにしたい配列

私が最初orinal配列の値をカウントし、第三配列に格納しようとし、その後、独自の値を持つ別の配列を作るためにループの差分文のトンを作るしようとしています。これは非常に複雑に思えましたが、これを行うもっと簡単な方法があるかどうかを見たいと思っていました。

答えて

13

は、それぞれの名前が発生した回数をカウントするためにハッシュを使用します。

use warnings; 
use strict; 
use Data::Dumper; 
$Data::Dumper::Sortkeys=1; 

my @names = qw(bob mike joe bob); 
my %counts; 
$counts{$_}++ for @names; 
print Dumper(\%counts); 

__END__ 

$VAR1 = { 
      'bob' => 2, 
      'joe' => 1, 
      'mike' => 1 
     }; 
3

これを行う最も簡単な方法は、ハッシュを利用することです。

 'dale' => 1, 
     'sue' => 1, 
     'joe' => 2, 
     'mike' => 2, 
     'bob' => 3, 
     'sally' => 2 
4
my %counts; 
++$counts{$_} for @names; 
my @unique = keys(%counts); 

my %counts; 
my @unique = grep !$counts{$_}++, @names; 

元に短縮することができます後者は、名前の順序を失う:

my @names = qw/joe bob sue bob mike sally mike bob sally dale joe/; 
my %counts; 
$counts{$_}++ for @names; 

これは、あなたのように見えるハッシュを与えます注文を保存する利点があります。 (これは、重複の最初の保持しています。)

後者はまた、リストのユニークなメンバーを得るための慣用的な方法です。通常は、カウントの持っているだけで副作用ですが、これでは、所望の生成物です。 :)

+0

ありがとう、私の状況では大した問題ではないが、これは将来必要になるかもしれない – searayman

関連する問題