You can use logical, set membership, and string comparison operations on enumerations. These operations also allow the use of enumeration in conditional statements, such as switch
and if
statements. Converters enable you to use char
vectors and cell arrays of strings as enumerations.
The WeekDays
class defines members that enumerate days of the week. This topic uses the WeekDays
class to illustrate how to perform operations on enumerations.
classdef WeekDays enumeration Monday, Tuesday, Wednesday, Thursday, Friday end end
For information on defining enumerations, see Define Enumeration Classes.
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 char
vectors, a cell array of char
vectors, or string
array elements to enumerations.
Other methods behave similarly to the equivalent function when used with enumerations. For information on a specific method, see the documentation for that function.
Conversion to char
is useful because you can define enumeration members with descriptive names. For example:
today = WeekDays.Friday;
['Today is ',char(today)]
ans = Today is Friday
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
Expression involving the relational operators, eq
and ne
, in which one operand is an enumeration allow the other operand to be of type char
. Before performing the operation, MATLAB® converts char
vectors to scalar enumerations or cell arrays of char
vectors to enumeration arrays.
Note
Enumeration classes that derive from MATLAB built-in classes cannot substitute char
vectors for enumeration members.
today = WeekDays.Friday;
today == 'Friday'
ans = 1
Compare enumeration array to char
vector:
wd = [WeekDays.Monday,WeekDays.Wednesday,WeekDays.Friday];
wd == 'Friday'
ans = 0 0 1
Compare enumeration array to cell array of char
vectors:
cv = {'Monday','Wednesday','Friday'}; md = [WeekDays.Tuesday,WeekDays.Thursday,WeekDays.Friday]; md ~= cv
ans = 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
switch
StatementsEquality (eq
) and inequality (ne
) methods enable you to use enumeration members in switch
statements. For example, using the WeekDays
class defined previously, construct a switch statement:
function c = Reminder(day) % Add error checking here switch(day) case WeekDays.Monday c = 'Department meeting at 10:00'; case WeekDays.Tuesday c = 'Meeting Free Day!'; 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.
char
VectorsNote
Enumeration classes that derive from MATLAB built-in classes cannot substitute char
vectors for enumeration members.
You can use 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 instead of specifying enumerations explicitly, MATLAB must convert the char
to an enumeration. Eliminate the need for this conversion if it is not necessary.
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 = 0
char
If you pass both enumeration and char
arguments to an enumeration class method, the class attempts to convert the char
to the class of the enumeration.
Determine if char
vector is a member of the enumeration array.
teamMeetings = [WeekDays.Wednesday WeekDays.Friday];
ismember('Friday',teamMeetings)
ans = 1
Determine if the enumeration member is a member of the cell array of char
vectors.
ismember(WeekDays.Friday,{'Wednesday','Friday'})
ans = 1
Enumeration classes provide methods to compare enumeration members with char
vectors. One of the arguments to the string comparison method must be a char
vector. Comparing two enumeration members returns false
.
char
VectorThe string comparison methods can compare enumeration members and char
vectors.
today = WeekDays.Tuesday;
strcmp(today,'Friday')
ans = 0
strcmp(today,'Tuesday')
ans = 1
Obtain information about enumeration classes using the enumeration
function. For example:
enumeration WeekDays
Enumeration members for class 'WeekDays': Monday Tuesday Wednesday Thursday Friday
See also Metaclass EnumeratedValues Property
To determine if a variable is an enumeration, use the isenum
function. For example:
today = WeekDays.Wednesday; isenum(today)
ans = 1
isenum
returns true
for empty enumeration objects:
noday = WeekDays.empty; isenum(noday)
ans = 1
To determine if the class of a variable class is an enumeration class, use the meta.class
object.
today = WeekDays.Wednesday; mc = metaclass(today); mc.Enumeration
ans = 1