Wildcard or multiple conditions on switch/case?

조회 수: 422 (최근 30일)
Douglas Anderson
Douglas Anderson 2018년 4월 24일
댓글: Shawn Stone 2022년 8월 4일
Hello,
Is there a way to deal with multiple conditions in switch/case? For example (this is just example):
  • Meat could be chicken pork beef lamb
  • Veggie could be beans peas corn
  • Fruit could be apple pear blueberry
Looking for a way to then select for each possible combination. Is the easiest way just nested switch/case? Or is there something more elegant? Is there an easy way to use case wildcards (not great for this example)?
Thanks!
Doug
  댓글 수: 4
Douglas Anderson
Douglas Anderson 2018년 4월 24일
I need to call three different functions, depending on the combination. Each of the functions then may have different arguments passed to them. (These are functions I have written).
One thing that I had thought of was making some kind of "code" for the options, like "Beef = 1", "Pork = 2", and then "Beans = 10", "Peas = 20", and "Apple = 100", etc. So Apple Peas Beef would be 121. Couldn't figure out how to parse this so that switch could deal with ANY one with Apple, i.e., 1** where * is any of the other veggies and fruits. That's the wild card I was thinking of.
Thanks!
Douglas Anderson
Douglas Anderson 2018년 4월 24일
편집: Douglas Anderson 2018년 4월 24일

Actually this is the code snippet:

handles.column_flag     = 1; % 1 = Solid, 2 = Decked
handles.hole_flag       = 10; % 10 = Standard, 20 = Long First Row
handles.row_flag        = 100; % 100 = Single Row, 200 = Multi Row, 300 = Progressive
handles.opening_flag    = 1000; % 1000 = Left, 2000 = Right, 3000 = Middle

So the combination of Decked, standard, Multi, Middle (summed) is 3212

There aren't a lot of choices for each flag, but there are a lot of combinations, each leading down a different code path!

Thank you for your thoughts.

Doug

댓글을 달려면 로그인하십시오.

채택된 답변

Steven Lord
Steven Lord 2019년 10월 18일
I'm not sure how switch / case fits into this. You don't need it (unless this is part of a homework assignment and it requires you to use a switch / case.) Let's define the food groups. I'm using string arrays but you could use numbers.
meat = ["chicken"; "beef"; "pork"; "lamb"];
veggie = ["beans"; "peas"; "corn"];
fruit = ["apple"; "pear"; "blueberry"];
Use ndgrid to generate the 3-D arrays where combining the same element of each of the three arrays gives you one combination.
[M, V, F] = ndgrid(meat, veggie, fruit);
Combine them into a 2-D list with each row representing one combination.
possibleDinners = [M(:), V(:), F(:)];
What to eat today?
whichDinner = randi(size(possibleDinners, 1));
dinnerTonight = possibleDinners(whichDinner, :)
  댓글 수: 3
Walter Roberson
Walter Roberson 2019년 10월 19일
I am not sure how this deals with "I need to call three different functions, depending on the combination." ?
Douglas Anderson
Douglas Anderson 2019년 10월 19일
Hello Walter,
There are three different functions that I have written. Which function is called depends on the particular combination, and then the appropriate variables are passed to the called function.
In the "meat/veggie/fruit" example, it could be whether on the grill or on the oven, and then how to do each one. In my case it has to do with particular designs for blasting, which can be complicated.
By the way, thank you for all the help you have given in the past!
Doug

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Fangjun Jiang
Fangjun Jiang 2018년 4월 24일
Choice='chicken';
switch Choice
case {'chicken','pork','beef'}
disp('meat');
case {'bean','pea'}
disp('veggie')
case {'apple','pear'}
disp('fruit');
otherwise
disp('no category');
end
  댓글 수: 7
Vivek Thaminni Ramamoorthy
Vivek Thaminni Ramamoorthy 2022년 5월 7일
This should be the accepted answer. It is a more elegant way to combine multiple cases.
Shawn Stone
Shawn Stone 2022년 8월 4일
For those wanting more robust and elegant ways of matching text, look up the validatestring() function: https://www.mathworks.com/help/matlab/ref/validatestring.html So that you don't have to supply all possible spellings of different text cases.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile 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