2013-09-21 52 views
2

,這是我的代碼來計算在Perl數組uniq的值,並把它們放在哈希陣列在陣列計數的uniq值不工作

@array=$_[0]; 

print Dumper @array; 

my %counts; 

$counts{$_}++ for @array; 
print Dumper(\%counts); 

輸出是:

$VAR1 = [ 
      -46, 
      '53', 
      11, 
      '84', 
      -2, 
      '47', 
      -7, 
      '72', 
      0, 
      '14', 
      -10, 
      '3', 
      -46, 
      '53', 
      11, 
      '84', 
      -2, 
      '47', 
      -7, 
      '72', 
      0, 
      '14', 
      -10, 
      '3' 
     ]; 
$VAR1 = { 
      'ARRAY(0x180c844)' => 1 
     }; 

爲什麼哈希數組空?爲了統計uniq值,該怎麼做?

回答

11

你有$_[0]一個數組引用,這是由Data::Dumper輸出證明

$VAR1 = [ .... 
#  ^-- array ref 

所以,當你做

$counts{$_}++ for @array; 

您字符串化的數組引用,成爲ARRAY(0x180c844)或一些這樣的,然後它的密鑰遞增。

如何解決:取消引用$_[0]。將其複製到數組或直接使用它。

@array = @{$_[0]}; 

$counts{$_}++ for @{$_[0]}; 

你應該注意到,獨特的數字檢查時,您可能會遇到的問題,如果是看不同的數字應該被認爲是相同,例如1.01。您可能要提前正常化的數字,像這樣:

$counds{ 0+$_ }++ for @array; 
0

你只是將數組複製到數組引用中。perl被上下文解釋。

嘗試:

@[email protected]{$_[0]}; 

print Dumper @array; 

my %counts; 

map { $counts{$_}++ } @array; 
print Dumper(\%counts); 

編輯:我用我自己的輸入在第一,而不是陣列-REF在初始變量..提出的取消引用應該修復它。

+0

我已經做到了,它給O_O – Mariya

+0

相同的結果,我只是跑它在Perl殼,得到了預期的輸出hashref與鍵作爲值,值作爲發生的次數 –

+0

沒有注意到數組引用,這就是爲什麼它在psh中工作的原因..只是使用了幾個值的qw()..更新了我的答案 –