-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:旧行匹配和新行匹配。

我觉得我错过了一些明显的东西,但不记得是什么。

两个列表都来自与 CSV 相同的文件。它们在一个领域有所不同。

输入:

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

有几行 type $line1

输出:在输出中它可能应该是列表列表的散列,任务是:为每个$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 回答