清除循环中的列表

时间:2013-08-13 06:22:46

标签: perl list

我有一个行列表(大约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行的一些统计数据。

[/编辑]

1 个答案:

答案 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