我正在编写一个脚本,生成多个大型数组哈希数据结构。目前脚本运行所需时间较长,我正在尝试优化它。
我进行了一些基准测试。通过利用数组引用、直接使用
在我的脚本开始时,我会遍历一个大文件,生成两个数组哈希数据结构。以下哪种哈希引用方法最可行、最有效?数组哈希的格式类似于此:
我进行了一些基准测试。通过利用数组引用、直接使用
@_
而不是将其复制到变量中以减少子例程调用开销,我已经成功将脚本执行速度提高了约3.5倍。我还删除了不必要的子例程和冗余变量声明。尽管有了这些改进,我仍然想让代码运行得更快。在我的脚本开始时,我会遍历一个大文件,生成两个数组哈希数据结构。以下哪种哈希引用方法最可行、最有效?数组哈希的格式类似于此:
%HoA = (
'C1' => ['1', '3', '3', '3'],
'C2' => ['3','2'],
'C3' => ['1','3','3','4','5','5'],
'C4' => ['3','3','4'],
'C5' => ['1'],
);
选项 1
当我解析文件时生成哈希数组(见下文)。最后将哈希数组放入哈希引用中。
my $hash_ref = \%HoA;
选项 2
解析文件,使 HoA(哈希套数组)中的每个键都有一个指向 array_ref 的值。最后将数组的哈希放入哈希 ref 中。
==============
我觉得选项 2 是一个不错的方法,但我该怎么做呢?
这是我目前的做法。
use strict; use warnings;
open(F1, "file.txt") or die $!;
my %HoA = ();
while (<F1>){
$_=~ s/\r//;
chomp;
my @cols = split(/\t/, $_);
push( @{$HoA{$cols[0]}}, @cols[1..$#cols]);
}
close F1;
我需要一种高效的数据结构,能够快速查找值和键。此外,我需要能够尽可能高效地多次将键值(数组)、键和 HoA(哈希表)传递到子程序中。
$
。 - chrsblck