array1 = [1 2 3]; % this will change in the program
array2 = [4 5 6]; % this will change in the program
switch anyVariable
case {array1}
disp('1')
case {array2}
disp('2')
otherwise
disp('3')
end
This always displays 3, irrespective of the value of anyVariable. Shall I change it to if-elseif kind structure?

 採用された回答

Stephen23
Stephen23 2018 年 5 月 31 日
編集済み: Stephen23 2018 年 5 月 31 日

0 投票

Use cell arrays, where each cell contains one scalar numeric (or a char vector):
V1 = {1,2,3};
V2 = {4,5,6};
switch scalarVal
case V1
disp('one')
case V2
disp('two')
otherwise
disp('none')
end

7 件のコメント

Walter Roberson
Walter Roberson 2018 年 5 月 31 日
Unless, that is, anyVariable is a vector and you want to compare the entire vector for equality with array1 or array2
Pramit Biswas
Pramit Biswas 2018 年 5 月 31 日
Aha, I missed it... Thank you. I used num2cell(array1): (This is just for reference)
Pramit Biswas
Pramit Biswas 2018 年 5 月 31 日
For the comment, is it possible to compare vector (numeric, not character), e.g.: switch [4 5 6]?
Walter Roberson
Walter Roberson 2018 年 5 月 31 日
"For objects that support the eq function, case_expression == switch_expression."
That said, I would want to test to be sure.
Walter Roberson
Walter Roberson 2018 年 5 月 31 日
It appears that it rejects vectors and arrays except for character vectors.
Pramit Biswas
Pramit Biswas 2018 年 6 月 1 日
Only after viewing the comment I tried to execute that (Thanks for the comment). It can be a nice feature to add.
Stephen23
Stephen23 2018 年 6 月 1 日
@Pramit Biswas: you can convert numeric row vectors to char (as long as they are suitable, i.e. positive integers, etc).

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File Exchange で Loops and Conditional Statements についてさらに検索

製品

タグ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by