perl - 使用mod替换多个if语句的算法

时间:2014-12-04 17:41:13

标签: perl

我有一个解析大文件的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),但我不能为我的生活找出如何优化它。

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;
}