set order of elseif
4 ビュー (過去 30 日間)
古いコメントを表示
Updated.
I have this code structure inside a loop. x, y and z are 1/0 variables. In this case the order of the elseif statement is: first x is evaluated, then y then z
if x
%code for case x
elseif y
%code for case y
elseif z
%code for case z
end
I would like to define a varible order (for the previous case order={'caseX','caseY','caseZ'}), where I can change the order in which the elseif statement is evaluated. So if I set order={'caseZ','caseX','caseY'}, I should get this: (first z is evaluated, then x then y)
order={'caseZ','caseX','caseY'}
%%% then
if z
%code for case z
elseif x
%code for case x
elseif y
%code for case y
end
An hint will be appreciated.
2 件のコメント
採用された回答
James Tursa
2020 年 12 月 17 日
編集済み: James Tursa
2020 年 12 月 17 日
Does this do what you want:
order = [1 2 3]; % or whatever
for k=1:numel(order)
switch order(k)
case 1
if( x )
% code for case x
break;
end
case 2
if( y )
% code for case y
break;
end
case 3
if( z )
% code for case z
break;
end
end
Or if you prefer the case selection could be for characters 'x', 'y', and 'z' instead of numbers 1, 2, 3.
The key is to have those break statements inside the cases so that the if-elseif-elseif control structure is emulated properly.
9 件のコメント
その他の回答 (2 件)
Bruno Luong
2020 年 12 月 17 日
prefered_order = 'xzy';
b = [x y z]; % logical conditions (in if/elseif)
code_to_be_exec = { @xcode, @ycode, @zcode }; % code in the if elseif block put in functions
[~,i] = ismember(prefered_order, 'xyz');
j = find(b(i), 1, 'first');
if ~isempty(j)
feval(code_to_be_exec{i(j)});
end
2 件のコメント
Bruno Luong
2020 年 12 月 17 日
編集済み: Bruno Luong
2020 年 12 月 17 日
Of course, unroll all 6 possible permutations
if strcmp(prefered_order, 'xyz')
% your original if/else
elseif strcmp(prefered_order, 'yxz')
% another order...
elseif strcmp(prefered_order, 'zyx')
....
end
KSSV
2020 年 12 月 17 日
Are you looking something like this.
if z
%code for case z
order = ['case','z'] ;
elseif x
%code for case x
order = ['case','x'] ;
elseif y
%code for case y
order = ['case','y'] ;
end
3 件のコメント
KSSV
2020 年 12 月 17 日
order = 'z'
if strcmpi(order,'z')
%code for case z
order = ['case','z'] ;
elseif strcmpi(order,'x')
%code for case x
order = ['case','x'] ;
elseif strcmpi(order,'y')
%code for case y
order = ['case','y'] ;
end
Also have a look on switch.
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!