Operations on Enumerations
Operations Supported by Enumerations
You can use logical, set membership, and string comparison operations on
enumerations. These operations also support the use of enumerations in conditional
statements, such as switch and if statements. The string and
char functions enable you to convert enumeration members to
strings and char vectors.
Example Enumeration Class
This topic uses the WeekDays class to illustrate how to perform
operations on enumerations. The WeekDays class defines members that
enumerate days of the week.
classdef WeekDays enumeration Monday, Tuesday, Wednesday, Thursday, Friday end end
For information on defining enumerations, see Define Enumeration Classes.
Default Methods
Enumeration classes have the following default methods:
methods('WeekDays')Methods for class WeekDays: WeekDays char intersect ne setxor strcmpi strncmp union cellstr eq ismember setdiff strcmp string strncmpi
The WeekDays method converts text formats into enumerations.
Supported formats include strings, char vectors, string arrays, and
cell arrays of char vectors. For example:
f = WeekDays(["Monday" "Friday"])
f =
1×2 WeekDays enumeration array
Monday FridayConvert Enumeration Members to Strings or char Vectors
Conversion of enumeration members to strings and char vectors is
useful for creating text that contains enumeration member names. For example, use the
string function to convert an enumeration member to a string and
include it in a sentence:
string(WeekDays.Monday) + " is our meeting day."ans =
"Monday is our meeting day."Use the char function in a similar way:
['Today is ' char(WeekDays.Friday) '.']
ans =
'Today is Friday.'Convert Enumeration Arrays to String Arrays or Cell Arrays of char Vectors
Use the string function to convert an enumeration array into a
string array:
sa = [WeekDays.Tuesday WeekDays.Thursday]; string(sa)
ans =
1×2 string array
"Tuesday" "Thursday"Use cellstr to convert an enumeration array to a cell array of char vectors.
ca = cellstr([WeekDays.Tuesday WeekDays.Thursday]); class(ca)
ans =
'cell'
Both cells in the cell array contain char vectors:
class([ca{1:2}])ans =
'char'Relational Operations with Enumerations, Strings, and char Vectors
You can compare enumeration instances with char vectors and
strings using the relational operators eq (==) and ne (~=), as well as the isequal
method.
Relational Operators eq and ne
Use eq and ne to compare enumeration members
with text values. For example, you can compare an enumeration member with a
string:
today = WeekDays.Friday;
today == "Friday"ans = logical 1
Compare an enumeration array to one char vector. The return
value is a logical array indicating which members of the enumeration array are
equivalent to the char vector:
wd = [WeekDays.Monday WeekDays.Wednesday WeekDays.Friday];
wd == 'Friday'ans = 1×3 logical array 0 0 1
This example uses the ne function to compare the
corresponding elements of an enumeration array and a string array of equal
length:
sa = ["Monday" "Wednesday" "Friday"]; md = [WeekDays.Tuesday WeekDays.Thursday WeekDays.Friday]; md ~= sa
ans = 1×3 logical array 1 1 0
The char vector Wednesday is equal to
(==) the enumeration member
WeekDays.Wednesday. You can use this equality in conditional
statements:
today = 'Wednesday'; ... if today == WeekDays.Wednesday disp('Team meeting at 2:00') end
isequal Method
The isequal method also enables comparisons between enumeration
instances and strings, character vectors, string arrays, and cell arrays of character
vectors.
a = WeekDays.Monday;
isequal(a,"Monday")ans =
logical
1When comparing an enumeration array to a single item, the behavior of
isequal differs slightly from eq and
ne. The isequal method requires that the two
values being compared are the same size. Therefore, isequal returns
false when comparing an enumeration array to a char vector or
string scalar, even if the text matches one of the enumeration members in the
array.
wd = [WeekDays.Monday WeekDays.Wednesday WeekDays.Friday];
isequal(wd,"Friday")ans =
logical
0Enumerations in switch Statements
Equality (eq) and inequality (ne) functions enable you to use enumeration members in switch statements. For example, using the WeekDays
enumeration defined previously, construct a switch statement:
function c = Reminder(day) % Add error checking here switch(day) case WeekDays.Monday c = 'No meetings'; case WeekDays.Tuesday c = 'Department meeting at 10:00'; case {WeekDays.Wednesday WeekDays.Friday} c = 'Team meeting at 2:00'; case WeekDays.Thursday c = 'Volleyball night'; end end
Pass a member of the WeekDays enumeration class to the Reminder function:
today = WeekDays.Wednesday; Reminder(today)
ans = Team meeting at 2:00
For more information, see Objects in Conditional Statements.
Substitute Strings or char Vectors
You can use strings or char vectors to represent specific
enumeration members:
function c = Reminder2(day) switch(day) case 'Monday' c = 'Department meeting at 10:00'; case 'Tuesday' c = 'Meeting Free Day!'; case {'Wednesday' 'Friday'} c = 'Team meeting at 2:00'; case 'Thursday' c = 'Volleyball night'; end end
Although you can use char vectors or strings instead of
specifying enumerations explicitly, MATLAB® must convert the text format to an enumeration. Eliminate the need for
this conversion if it is not necessary.
Enumeration Set Membership
Enumeration classes provide methods to determine set membership.
Determine if today is a meeting day for your team. Create a set of enumeration members corresponding to the days on which the team has meetings.
today = WeekDays.Tuesday; teamMeetings = [WeekDays.Wednesday WeekDays.Friday];
Use ismember to determine if today is part of the teamMeetings set:
ismember(today,teamMeetings)
ans =
0Mixed Sets of Enumeration and Text
If you pass both enumeration members and text values to an enumeration class method, the class attempts to convert the text value to the class of the enumeration.
Determine if the char vector 'Friday' is a
member of the enumeration array.
teamMeetings = [WeekDays.Wednesday WeekDays.Friday];
ismember('Friday',teamMeetings)ans = logical 1
Determine if the enumeration member is a member of the string array.
ismember(WeekDays.Friday,["Wednesday" "Friday"])
ans = logical 1
Enumeration Text Comparison Methods
Enumeration classes provide methods to compare enumeration members with text. One of
the arguments to the string comparison methods must be a char vector
or a string. Comparing two enumeration members returns false.
Comparing Enumeration Member with Strings or char Vectors
The string comparison methods can compare enumeration members with
char vectors and strings.
today = WeekDays.Tuesday;
strcmp(today,'Friday')ans =
0strcmp(today,"Tuesday")ans =
1Get Information About Enumerations
Obtain information about enumeration classes using the enumeration function. For example:
enumeration WeekDays
Enumeration members for class 'WeekDays':
Monday
Tuesday
Wednesday
Thursday
FridayFor more information on how class introspection works with enumerations, see Metaclass EnumeratedValues Property.
Testing for an Enumeration
To determine if a value is an enumeration, use the isenum function. For example:
today = WeekDays.Wednesday; isenum(today)
ans =
1isenum returns true for empty enumeration objects:
noday = WeekDays.empty; isenum(noday)
ans =
1To determine if a class is an enumeration class, use the matlab.metadata.Class object.
today = WeekDays.Wednesday; mc = metaclass(today); mc.Enumeration
ans =
1