tri*_*ged 4 perl perl-data-structures
首先,如果有人提出这个问题,我想道歉.很难找到答案,无法找到如何创建数组哈希和哈希的数组....
我正在创建一个日志分析器.每个错误条目都在表单中
timestamp # # human_timestamp errno #
Run Code Online (Sandbox Code Playgroud)
我使用映射函数创建了散列哈希,以执行以下操作:
$logRef->{++$errCnt} =
{
line => $lineNum,
timestamp => $timestamp,
humanStamp => $humanStamp,
errno => $errno,
text => ''
};
Run Code Online (Sandbox Code Playgroud)
稍后我会做一些分析,我想在行号之间隔离条目.分析条目也存储在哈希中......
$analysis{++$iteration} =
{
result => $result,
startLine => $startLine,
endLine => $endLine,
errors => undef
};
Run Code Online (Sandbox Code Playgroud)
$ 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;
}
Run Code Online (Sandbox Code Playgroud)
我的日志文件包含30000多个条目并不罕见.除了创建errs数组之外,分析运行得相当快.有没有更有效的方法来生成这个数组?
谢谢
每当你发现自己说的话时$hash{++$counter} = ...,问问自己使用数组是否更合适($array[++$counter] = ...).
检索哈希元素$hash{$key}需要Perl通过哈希函数传递密钥并遍历链表,执行一个或多个字符串比较以查找值.对字符串进行字符串化也可能需要一些努力.
查找数组元素要快得多.Perl可能需要将索引转换为数字,但是可以直接找到保存数组值的内存位置.
| 归档时间: |
|
| 查看次数: |
114 次 |
| 最近记录: |