我有一个解析大文件的perl脚本。它有效,但速度很慢,我看到了一种我想利用的模式,但我不知道如何写它。
有一个部分我计算了一些 objectIds ,并且必须返回一个值 Spaces 。 * objectIds 的最小数量为3,并以奇数增量增加,我的输出从3开始,并以3的倍数增加。
所以我有这样的30个语句链
if($objectIds == 3)
{
$spaces = 3;
}
if($objectIds == 5)
{
$spaces = 6;
}
if($objectIds == 7)
{
$spaces = 9;
}
我看到差异是以1的模数递增,即(3%3 = 0),(6%5 = 1), (9%7 = 2),但我不能为我的生活找出如何优化它。
答案 0 :(得分:3)
此公式应计算并替换您的ifs,
# $spaces = $objectIds + ($objectIds-3)/2;
# $spaces = (2*$objectIds + $objectIds-3)/2;
# $spaces = 3*($objectIds -1)/2;
$spaces = ($objectIds -1) * 3/2;
答案 1 :(得分:0)
我看到的第一个优化是使用elsif
:
if($objectIds == 3)
{
$spaces = 3;
}
elsif($objectIds == 5)
{
$spaces = 6;
}
elsif($objectIds == 7)
{
$spaces = 9;
}