我正在尝试获取A,B和C列的最大值,并将这些值与它们发生的日期和时间联系起来。要获取最大值,我只需要使用List :: Util模块,但是我不确定如何将其指向数组中的特定列,然后引用日期和时间。
DATE TIME A B C
11/22/14 21:00:00 5,854 2,105 1,290
11/22/14 21:02:35 7,692 2,593 2,649
11/22/14 21:05:10 1,639 458 444
11/22/14 21:07:00 1,032 487 434
11/22/14 21:08:15 4,707 1,352 646
11/22/14 21:10:22 351 46 162
11/22/14 21:10:55 5,507 1,943 957
11/22/14 21:11:00 1,703 647 516
11/22/14 21:12:00 2,359 751 785
11/22/14 21:14:05 67 25 44
11/22/14 21:16:25 4,072 1,596 1,050
11/22/14 21:17:48 5,060 2,131 1,996
11/22/14 21:19:00 341 42 137
11/22/14 21:23:00 1,308 71 634
我的理解:
您最后需要三个数据:
您不想对数据进行排序。您不需要存储任何其他内容。
您没有指定任何代码,因此我不会为您提供完整的程序。您需要自己尝试。相反,我会给您一些提示:
您应该阅读参考书,以及它们如何工作。我们会将您的数据存储在参考中:
my %data;
$data{A}->{time} = "xxxxx"; # Time of highest item in column "A"
$data{A}->{date} = "xxxxx"; # Date of highest item in column "A"
$data{A}->{value} = "xxxx"; # Value of highest item in column "A"
与其他两列相同。
您可以遍历数据(是文件吗?您没有解释)
my %data;
while ( my $line .... ) {
my ( $date, $time, a_value, b_value, c_value ) = split /\s*/, $line;
if ( not exists $data{A}->{value} or $a_value > $data{A}->{value} ) {
$data{A}->{value} = $a_value;
$data{A}->{date} = $date;
$data{A}->{time} = $time;
}
... # Same for B and C
在此循环中,$data{A}->{value
如果该值高于我之前存储的值,则将}设置为我刚刚读取的值。这是寻求最高价值的常见方式。如果该值尚不存在,我还需要存储它。因此,我检查是否$data{A}->{value}
存在。如果没有,我仍然需要存储该值。(我本来可以做的if ( not exists $data{A} or $a_value > $data{A}->{value} )
)。
在while循环之后,%data
将包含每一列的最大值,以及这些值的日期和时间。有很多代码重复。我可以为每列添加一个内部循环,但是仅用三列就不值得付出努力。
另外,请记住不要在数据中包含标题列。
如果$data{A}->{value}
使您感到困惑,则可以使用三种不同的哈希值:一种用于存储日期,一种用于存储时间,另一种用于存储值。
my %times;
my %dates
my %values;
while ( my $line .... ) {
my ( $date, $time, a_value, b_value, c_value ) = split /\s*/, $line;
if ( not exists $values{A} or $a_value > $values{A} ) {
$values{A} = $a_value;
$dates{A} = $date;
$times{A} = $time;
}
... # Same for B and C
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句