perl – 算法效率改进
发布时间:2020-12-16 06:20:42 所属栏目:大数据 来源:网络整理
导读:首先,如果有人提出这个问题,我想道歉.很难找到答案,无法找到如何创建数组哈希和哈希的数组…. 我正在创建一个日志分析器.每个错误条目都在表单中 timestamp # # human_timestamp errno # 我使用映射函数创建了散列哈希,以执行以下操作: $logRef-{++$errCnt}
首先,如果有人提出这个问题,我想道歉.很难找到答案,无法找到如何创建数组哈希和哈希的数组….
我正在创建一个日志分析器.每个错误条目都在表单中 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通过哈希函数传递密钥并遍历链表,执行一个或多个字符串比较以查找值.对字符串进行字符串化也可能需要一些努力. 查找数组元素要快得多. Perl可能需要将索引转换为数字,但是可以直接找到保存数组值的内存位置. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |