2015-05-26 71 views

回答

-1

這是一個非常簡單的家庭作業的問題(這就是爲什麼這已經downvoted幾次,毫無疑問),但它是,如果你」顯示哈希的力量的好方法重新爲之奮鬥。

讓我們來分析一下。您想按第一列對事物進行分類(並計算出現次數),然後對相關數據進行計數。哈希對此非常完美。

讓我們假設最終散列將是這個樣子:

{ 
    'a' => { 
     '*count' => 3, 
     'x1' => 2, 
     'y1' => 1, 
    }, 
    . . . 
} 

(其中'*count'是不應該出現在你的數據字符串)和你的輸出將看起來像你的規範。

解析數據非常簡單。

my $hash = {}; 
my $count = '*count'; 
for(@lines) { 
    chomp; 
    my ($x, $y) = split(/\s+/); 
    $hash->{$x}->{$count}++; 
    $hash->{$x}->{$y}++; 
} 

打印出來也很簡單:

for my $x (sort keys %{$hash}) { 
    my @output = (sprintf('%s = %d', $x, $hash->{$x}->{$count})); 
    for my $y (qw{ x1 y1 z1 }) { 
     push(@output, sprintf('%s = %d', $y, $hash->{$x}->{$y})); 
    } 
    print join(', ', @output) . "\n"; 
} 

注意,如果說,$hash->{'c'}->{'z1'}不存在,返回仍然是0值。你可以做exists額外檢查如果你喜歡,但不應該有必要。

+2

我會親自避免將計數嵌入到散列中 - 依賴於「從不出現的東西」是糟糕的程序邏輯。爲什麼不改用subhashes上的'values'? – Sobrique

+0

...或單獨的'count_of'散列?這不像你用字節支付。 – Sobrique

相關問題