我有一个似乎很简单的问题。我有一个for循环,我在每次迭代时调用不同的函数。如果某个条件成立,则只需要在第一次迭代时使用其中一些函数。解决这个问题的一种方法是在调用相关函数之前使用“if”语句检查条件,但是我想知道是否还有其他方法可以解决这个问题,因为我有10个以上的函数具有相同的情况(具有不同的当然条件)?例如,请查看以下伪代码:
for Iteration < Generation
...
if ('certain condition 01 holds true')
output = function01(arguments)
end
...
...
if ('certain condition 02 holds true')
output = function02(arguments)
end
...
...
if ('certain condition 10 holds true')
output = function10(arguments)
end
...
end
如果我有10000次迭代,那么每个“if”语句应该被评估10000次,这显着增加了计算时间。是否有可能使用面向对象的编程和类而不是函数来使它更好,可能更快?
答案 0 :(得分:4)
如果你总是需要检查某些条件,那么就没有办法避免它。但是,如果你知道前两个条件只能出现在第一个,比如500个循环中,那么将大循环分成两个 - 第一个包含所有10个条件(500个迭代),第二个条件只包含8个(总计 - 500次迭代)。
要记住的另一个重要事项是在条件中使用elseif
或在循环中使用continue
(前提条件是互斥的 - 我从您的代码示例中推断出这一点)。通过这种方式,您可以确保在找到相关条件后,其余的if
语句将不会被执行。此外,您应该在循环开始时检查最可能的情况。即如果您知道在大多数情况下条件5最有可能,那么应首先检查条件5。通过这种方式,您可以减少评估if
语句的次数。
最后,您可以使用switch
语句 - 它比多个elseif
更具可读性,如果其中一个条件为真,则会自动忽略以下条件。< / p>
答案 1 :(得分:2)
我不了解类和面向对象,但您可以将函数内部的顺序更改为:
...
% 'iteration' 1
if (condition1) then
output = function1(args)
end
if (condition2) then
output = function2(args)
end
.
.
.
for ix = 2:max
% code inside loop
end
用文字表示,在循环开始之前放置第一次迭代时调用的代码,然后从第二次迭代开始。