2014-12-04 50 views
0

我有一个解析大文件的perl脚本。它有效,但速度很慢,我看到了一种我想要利用的模式,但我不知道如何编写它。perl - 使用mod替换多个if语句的算法

有一个部分,在那里我算一个数的ObjectID,并有返回值空间。最小号码为* objectIds为3,并以奇数增量增加,我的输出从3开始并以3的倍数增加。

所以我有这样

if($objectIds == 3) 
{ 
    $spaces = 3; 
} 
if($objectIds == 5) 
{ 
    $spaces = 6; 
} 
if($objectIds == 7) 
{ 
    $spaces = 9; 
} 

我看到的差由1模递增,即,30个语句链(3%3 = 0)(6%5 = 1),(9%7 = 2),但我不能为我的生活弄清楚如何优化这个。

回答

3

这个公式应该计算并更换IFS,

# $spaces = $objectIds + ($objectIds-3)/2; 
# $spaces = (2*$objectIds + $objectIds-3)/2; 
# $spaces = 3*($objectIds -1)/2; 

$spaces = ($objectIds -1) * 3/2; 
+2

'$ spaces = 3 *($ objectIds - 1)/ 2' – toolic 2014-12-04 18:00:53

+0

我有大概1天的经验,所以我不确定。 – FriggenA 2014-12-04 18:07:25

+1

@toolic tnx以备评论。 – 2014-12-04 18:09:31

0

我看到的第一个优化是使用elsif

if($objectIds == 3) 
{ 
    $spaces = 3; 
} 
elsif($objectIds == 5) 
{ 
    $spaces = 6; 
} 
elsif($objectIds == 7) 
{ 
    $spaces = 9; 
} 
+0

我会更新我的脚本,并启动它。它解析的文件在1 - 8 Gb之间,所以任何改进都有帮助!谢谢。 – FriggenA 2014-12-04 17:54:02