我需要多次使用elseif
语句,elseif
取决于序列位置。
说我想用elseif
100次:
if cond1
action1
elseif cond2
action2
elseif cond3
action3
.
.
elseif cond101
action101
else
action102
end
如何使用循环在MATLAB中实现它还是有更好的更简洁的功能用于此目的?
另外,我自己编写了所有101个条件,并且可以将它们放在任何结构中。
答案 0 :(得分:3)
正如其他评论所说,我认为您应该重新考虑处理数据的方式,因为从软件工程的角度来看,如果级联是坏的,那真的很糟糕。
但是,如果你没有更好的表达方式,你可以使用Matlab的两个简单的功能,这些功能非常有用:匿名函数和单元数组。
这个想法是创建一个函数的单元格数组,每个函数都为你提供了你想要放在if中的条件,然后测试每个函数,看看哪个函数给出了你的真实函数。
例如,要测试一个小于0,介于0和1之间,或大于1的数字,您可以这样做:
test_array = {
@(n) n < 0,
@(n) n >= 0 && n < 1,
@(n) n >= 1
}
然后,为了测试0.5,你可以做到
for ii =[1:numel(test_array)]
if(test_array{ii}(0.5))
disp(ii)
end
end
我在Matlab R2016a上进行了测试,它确实有效。
希望它有所帮助!
答案 1 :(得分:1)
在评论中你似乎提到,通常你会有一组101个条件,无论是真还是假,你只想得到第一个成为真的索引。
你不需要if
,绝对不是101。这样的东西会起作用:
conditions=[false true true false ... ]; % E.g. conditions=rand(1,101)<0.2;
% find the first one that is true
index=find(conditions,1,'first');