2012-07-05 71 views
2

我有大約50陣列填充有數字和我必須報告出來的所有這些要素的總和爲每一個陣列,使得最終結果具有單獨的陣列50和。一次添加多個陣列perl的

有什麼短辦法做到這一點,而不是爲每個陣列寫循環有什麼不同?

我是用Perl初學者。任何有用的意見/建議,將不勝感激。

這是我到目前爲止的代碼:

for($j = 1 ; $j <= 50 ; $j++) { 
    for (@arr[$j]) { 
    $sum[$j] += $_; 
    } 
    print $sum[$j]; 
} 

謝謝!

+1

50個陣列是如何構成的?你有沒有「數組陣列」,或者你有50個單獨的數組? – David 2012-07-05 15:57:32

+0

從'@ arr'的第二個元素(索引'$ j'爲1)開始,到第五十一個元素(索引50)結束,您的循環似乎被關閉了一個,呃,兩個。 Perl的更富表現力的循環 - 對於我的$ whatever(@whatevers)' - 避免這種錯誤,就象5.12及更高版本中提供的'while(my($ index,$ element)= each(@array))'一樣。 – pilcrow 2012-07-05 16:23:17

回答

7

您可以使用List::Utilmap,假設你有一個數組的數組:

use strict; 
use warnings; 
use Data::Dumper; 
use List::Util qw(sum); 

my @arrays = (
    [1,2,3], 
    [4,5,6], 
    [7,8,9] 
); 
my @sums = map sum(@$_), @arrays; # sum each array 
print Dumper \@sums; 

輸出:

$VAR1 = [ 
      '6',  # sum of $arrays[0] 
      '15',  #    1 
      '24'  #    2 
     ]; 
+0

嘿,我真的很感謝你的答案,它的工作原理非常好,但我的輸出必須以正確的方式顯示。無論如何,我可以擺脫我的輸出中的「$ VAR1」,並在每個數組的總和之前放置一些其他文本?我需要做的是: 求和陣列1:陣列3的15 和:陣列2的6 總和24等 我會很感激你對這一反饋。非常感謝! – user1297069 2012-07-06 13:17:26

+0

其實我想通再次出來..感謝您的幫助:) – user1297069 2012-07-06 13:30:43

+0

@ user1297069好了,我以爲你會知道你自己的數據,但要做到這一點特定的打印方法之一是數組$'的打印「總和_:$款項[$ _] \ n「for keys @ sums' – TLP 2012-07-06 15:36:33

4
use strict; use warnings; 

use List::Util qw (sum); 

my %data = (
    cats => [ map +(rand 100), 1 .. 10 ], 
    dogs => [ map +(100 - rand 100), 1 .. 20 ], 
); 

my %sums = map { $_ => sum(@{ $data{$_} }) } keys %data; 

use YAML; 
print Dump \%data, \%sums; 
2

對於TIMTOWTDI!

# You cannot store arrays within arrays just with ((...), (...)) syntax, 
# as this list will be flattened. 
# Instead you should store _references_ to arrays, like this: 
my @array_of_arrays = ([1..3], [4..6], [8..10]); 
my @sums_of_arrays; 

# ... then iterate over it, arrayref by arrayref 
# (if `map` is somehow not for you) :) 
for my $ref_arr (@array_of_arrays) { 
    my $arr_sum; 
    for my $el (@$ref_arr) { 
    $arr_sum += $el; 
    } 
    push @sums_of_arrays, $arr_sum; 
} 

但請注意,我認爲這個解決方案不如@TLP和@SinanÜnür給出的解決方案。 )For當你需要對數組的每個元素(或者數組的數組)進行某些操作(例如變換)時,這個構造就很好。但是在這裏你只需要每個元素的東西 - 換句話說,一張地圖。 )