-1

特定の基準ではるかに大きなリストと比較し、結果を保存する必要がある行のリスト (約 2K) があります。だから私がやっていることは次のとおりです。

foreach( keys %lines1 )
{
    ($orig1,$orig2,$orig3) = (split( /,/, $lines1{$_}))[1,2,3]
    push( @result, grep{ ($data1,$data2,$data3) = (split( /,/, $lines2{$_})[1,2,3];$orig1 == $data1 && $orig2 == $data2 && $orig3 == $data3 } keys %lines2 );
    $hash_result{$count} = @result;
}

問題は@resultデータの蓄積です。したがって、最初の実行ではサイズが 1 で、2 回目にデータがプッシュされ、サイズは 2 です。古い行が一致し、新しい行が一致します。

明らかな何かが欠けているように感じますが、何を覚えていません。

どちらのリストも CSV と同じファイルから取得されます。それらは 1 つのフィールドによって異なります。

入力:

data1,data2,data3,data4,data5,data6,data7,data8,0 - $line1
data1,data2,data3,data4,data5,data6,data7,data8,1 - $line2

タイプの行が数行あり$line1ます。

出力: 出力では、おそらく list の list のハッシュである必要があります。タスクは次のとおりです:$line1一致するものすべてについて、いくつかの統計を計算します。

誰か助けてくれませんか?

それとも、私はそれを完全に間違っていますか?

[編集]

ここで探しているのは、次のようなものです。

"$hash_result{$count} = [[1,2,3,10,4,6][1,2,3,5,3,11][1,2,3,100,60,20]]"

$count 行でいくつかの統計を計算できるようにします。

[/編集]

4

1 に答える 1

0

平均計算の追加

foreach( keys %lines1 ) {
    ($orig1,$orig2,$orig3) = (split( /,/, $lines1{$_}))[1,2,3]
    @result = grep{ ($data1,$data2,$data3) = (split( /,/, $lines2{$_})[1,2,3];$orig1 == $data1 && $orig2 == $data2 && $orig3 == $data3 } keys %lines2 );
    push @{$hash_result{$count}}, [ @result ];
}
my $average= 0;
foreach my $list (@{$hash_result{$count}}) {
    $average+= $list->[3]; # 10 + 5 + 100
}
$average/= scalar(@{$hash_result{$count}});   # 10+5+100 / 3
于 2013-08-13T07:23:36.603 に答える