2014-10-22 112 views
0

我知道如何做到這種冗長的方式,但我想知道是否有一種簡單的方法將一系列數字拆分成桶。將輸入拆分爲桶 - Perl

我有一系列關聯兩個數相加的數據:

頻率值

我想要的值分解成頻率的小節,然後得到的平均值和各成員的標準偏差頻率結果的跨度爲0.05。

所以我想要的是一系列數組保存與頻率相關的值。

我的長篇大論的做法是

%results =(); 
$key = int(($frequency * 100)/20); 
if (!exists($results{$key})) { 
    @temp = ($value); 
    $results{$key} = @temp; 
} else { 
    $results{$key} = push($results{$key}, $value); 
} 

有沒有辦法簡化這個?

+0

如果你編輯你的問題以包括你從哪裏獲得'$頻率'和'$價值',它可能會提供更多信息。他們在陣列?一些複雜的數據結構? – 2014-10-22 07:17:18

回答

1

您只需要檢查當您嘗試從哈希表中獲取數據時是否存在事物。向表格中添加數據時無需執行此操作。 另外,您不需要在數組中放置臨時名稱。您可以通過在數字列表中放置[]來創建匿名數組。您也可以使用{}進行匿名哈希,但這並不直接與此問題相關。

my %results; #will store data like $results{$frequency} = [list of values] 
# storing data: 
my $key = int(($frequency * 100)/20); 
push @{$results{$frequency}}, $value;   #the @{ } means interpret $results{$frequency} as an array 
# fetching data, here is where you check if things exist, sometimes 
foreach (keys %results) { 
    print "For $_ frequency...\n"; 
    print "The values are: @{$results{$_}}\n\n"; #if you don't include @{ }, it will say ARRAYREF(0xsdfasdf) 
} 
3

它看起來像你實際上想要一個數組哈希。

因此,你只是需要push

push @{ $results{$key} }, $value; 

關於這些概念的更多信息,請Perl Data Structures Cookbook