我有一个行列表(大约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
有几行类型$line1
。
输出:
在输出中,它可能应该是列表列表的哈希值,任务是:对于每个匹配的$line1
计算一些统计信息。
有人可以帮忙吗?
或许我完全错了?
[编辑]
我在这里寻找的是这样的:
“$ hash_result {$ count} = [[1,2,3,10,4,6] [1,2,3,5,3,11] [1,2,3,100,60,20]] “
这样我就可以计算$ count行的一些统计数据。
[/编辑]
答案 0 :(得分: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