gpt4 book ai didi

perl - 算法效率提升

转载 作者:行者123 更新时间:2023-12-04 23:29:15 26 4
gpt4 key购买 nike

首先,如果有人问到这个问题,我想道歉。很难在没有找到如何创建散列数组和散列数组的情况下搜索答案....

我正在创建一个日志分析器。每个错误条目的格式为

timestamp # # human_timestamp errno #

我使用映射函数创建了一个哈希值来执行以下操作:
$logRef->{++$errCnt} =
{
line => $lineNum,
timestamp => $timestamp,
humanStamp => $humanStamp,
errno => $errno,
text => ''
};

后来我做了一些分析,我想隔离行号之间的条目。
分析条目也存储在哈希中......
$analysis{++$iteration} =
{
result => $result,
startLine => $startLine,
endLine => $endLine,
errors => undef
};

$analysis{errors} 将是一个数组引用。它是通过执行以下操作来填充的。
foreach my $iteration ( keys %analysis )
{
my @errKeys = grep { $logRef->{$_}{line} >= $analysis{$iteration}{startLine} &&
$logRef->{$_}{line} <= $analysis{$iteration}{endLine} }
keys %$logRef;

my @errs = ();
push @errs, $logRef->{$_}{errno} foreach ( @errKeys );

$analysis{$iteration}{errors} = \@errs;
}

我的日志文件包含 30000 多个条目的情况并不少见。除了创建 errs 数组外,分析运行得相当快。有没有更有效的方法来生成这个数组?

谢谢

最佳答案

每当你发现自己在说 $hash{++$counter} = ... 之类的话,问问自己是否使用数组( $array[++$counter] = ... )更合适。

检索散列元素 $hash{$key}要求 Perl 通过哈希函数传递键并遍历链表,执行一个或多个字符串比较以找到值。将 key 字符串化也可能需要一些努力。

查找数组元素要快得多。 Perl 可能需要将索引转换为数字,但从那里找到保存数组值的内存位置很简单。

关于perl - 算法效率提升,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7531376/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com