Для перечислений можно использовать логические операции, операции задания членства и сравнения строк. Эти операции также поддерживают использование перечислений в условных операторах, таких как switch и if заявления. string и char функции позволяют преобразовывать элементы перечисления в строки и char векторы.
В этом разделе используется WeekDays для иллюстрации выполнения операций над перечислениями. WeekDays определяет элементы, перечисляющие дни недели.
classdef WeekDays enumeration Monday, Tuesday, Wednesday, Thursday, Friday end end
Сведения об определении перечислений см. в разделе Определение классов перечисления.
Классы перечисления имеют следующие методы по умолчанию:
methods('WeekDays')Methods for class WeekDays: WeekDays char intersect ne setxor strcmpi strncmp union cellstr eq ismember setdiff strcmp string strncmpi
WeekDays преобразует текстовые форматы в перечисления. Поддерживаемые форматы включают строки, char векторы, строковые массивы и массивы ячеек char векторы. Например:
f = WeekDays(["Monday" "Friday"])
f =
1×2 WeekDays enumeration array
Monday Fridaychar ВекторыПреобразование элементов перечисления в строки и char векторы полезны для создания текста, содержащего имена элементов перечисления. Например, используйте string функция для преобразования элемента перечисления в строку и включения его в предложение:
string(WeekDays.Monday) + " is our meeting day."ans =
"Monday is our meeting day."Используйте char аналогичным образом:
['Today is ' char(WeekDays.Friday) '.']
ans =
'Today is Friday.'char ВекторыИспользуйте string для преобразования массива перечисления в строковый массив:
sa = [WeekDays.Tuesday WeekDays.Thursday]; string(sa)
ans =
1×2 string array
"Tuesday" "Thursday"Использовать cellstr преобразование массива перечисления в массив ячеек char векторы.
ca = cellstr([WeekDays.Tuesday WeekDays.Thursday]); class(ca)
ans =
'cell'
Обе ячейки в массиве ячеек содержат char векторы:
class([ca{1:2}])ans =
'char'char ВекторыМожно сравнить экземпляры перечисления с char векторы и строки, использующие реляционные операторы eq (==) и ne (~=), а также isequal способ.
eq и neИспользовать eq и ne для сравнения элементов перечисления со значениями текста. Например, можно сравнить элемент перечисления со строкой:
today = WeekDays.Friday;
today == "Friday"ans = logical 1
Сравнение массива перечисления с одним char вектор. Возвращаемое значение является логическим массивом, указывающим, какие элементы массива перечисления эквивалентны char вектор:
wd = [WeekDays.Monday WeekDays.Wednesday WeekDays.Friday];
wd == 'Friday'ans = 1×3 logical array 0 0 1
В этом примере используется ne функция для сравнения соответствующих элементов массива перечисления и строкового массива равной длины:
sa = ["Monday" "Wednesday" "Friday"]; md = [WeekDays.Tuesday WeekDays.Thursday WeekDays.Friday]; md ~= sa
ans = 1×3 logical array 1 1 0
char вектор Wednesday равно (==) элемент перечисления WeekDays.Wednesday. Это равенство можно использовать в условных операторах:
today = 'Wednesday'; ... if today == WeekDays.Wednesday disp('Team meeting at 2:00') end
isequal Метод isequal способ также позволяет сравнивать экземпляры перечисления и строки, символьные векторы, строковые массивы и массивы ячеек символьных векторов.
a = WeekDays.Monday;
isequal(a,"Monday")ans =
logical
1При сравнении массива перечисления с одним элементом поведение isequal незначительно отличается от eq и ne. isequal метод требует, чтобы два сравниваемых значения были одного размера. Поэтому isequal возвращает значение false при сравнении массива перечисления с char вектор или строковый скаляр, даже если текст совпадает с одним из элементов перечисления в массиве.
wd = [WeekDays.Monday WeekDays.Wednesday WeekDays.Friday];
isequal(wd,"Friday")ans =
logical
0switch ЗаявленияРавенство (eq) и неравенство (ne) функции позволяют использовать элементы перечисления в switch заявления. Например, использование WeekDays перечисление, определенное ранее, создайте инструкцию switch:
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
Передача элемента WeekDays класс перечисления в Reminder функция:
today = WeekDays.Wednesday; Reminder(today)
ans = Team meeting at 2:00
Дополнительные сведения см. в разделе Объекты в условных операторах.
char ВекторыМожно использовать строки или char векторы для представления конкретных элементов перечисления:
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
Хотя вы можете использовать char вместо явного указания перечислений, MATLAB ® должен преобразовать текстовый формат в перечисление. Устраните необходимость в этом преобразовании, если в этом нет необходимости.
Классы перечисления предоставляют методы для определения членства в наборе.
Определите, является ли сегодняшний день днем встречи для вашей команды. Создайте набор членов перечисления, соответствующий дням, в которые участники коллектива проводят собрания.
today = WeekDays.Tuesday; teamMeetings = [WeekDays.Wednesday WeekDays.Friday];
Использовать ismember чтобы определить, today является частью teamMeetings набор:
ismember(today,teamMeetings)
ans =
0Если передать как элементы перечисления, так и текстовые значения методу класса перечисления, класс попытается преобразовать текстовое значение в класс перечисления.
Определите, char вектор 'Friday' является членом массива перечисления.
teamMeetings = [WeekDays.Wednesday WeekDays.Friday];
ismember('Friday',teamMeetings)ans = logical 1
Определите, является ли элемент перечисления членом строкового массива.
ismember(WeekDays.Friday,["Wednesday" "Friday"])
ans = logical 1
Классы перечисления предоставляют методы для сравнения элементов перечисления с текстом. Одним из аргументов методов сравнения строк должен быть char вектор или строка. Сравнение двух возвращаемых элементов перечисления false.
char ВекторыМетоды сравнения строк могут сравнивать элементы перечисления с char векторы и строки.
today = WeekDays.Tuesday;
strcmp(today,'Friday')ans =
0strcmp(today,"Tuesday")ans =
1Получение информации о классах перечисления с помощью enumeration функция. Например:
enumeration WeekDays
Enumeration members for class 'WeekDays':
Monday
Tuesday
Wednesday
Thursday
FridayДополнительные сведения о том, как интроспекция классов работает с перечислениями, см. в разделе Свойство Metaclass EnumeriveValues.
Чтобы определить, является ли значение перечислением, используйте isenum функция. Например:
today = WeekDays.Wednesday; isenum(today)
ans =
1isenum прибыль true для пустых объектов перечисления:
noday = WeekDays.empty; isenum(noday)
ans =
1Чтобы определить, является ли класс классом перечисления, используйте meta.class объект.
today = WeekDays.Wednesday; mc = metaclass(today); mc.Enumeration
ans =
1