我正在尝试使用这个正则表达式:
my @vulnerabilities = ($g ~~ m:g/\s+("Low"||"Medium"||"High")\s+/);
Run Code Online (Sandbox Code Playgroud)
在像这样的文件块上,从一个“排序”到下一个的块。每个必须有几百 KB,并且所有这些加在一起需要 1 到 3 秒(每次迭代除以 32)。
这怎么能加快呢?
对示例文件的检查表明,字符串仅作为整行出现,以制表符和空格开头。从你的回答中,我进一步了解到你真的只对计数感兴趣。如果是这种情况,那么我会建议这样的解决方案:
my %targets = "\t Low", "Low", "\t Medium", "Medium", "\t High", "High";
my %vulnerabilities is Bag = $g.lines.map: {
%targets{$_} // Empty
}
dd %vulnerabilities; # ("Low"=>2877,"Medium"=>54).Bag
Run Code Online (Sandbox Code Playgroud)
这在我的机器上运行大约 0.25 秒。
彻底查看问题域总是值得的!