Можно использовать логический, членство в наборе и операции сравнения строк на перечислениях. Эти операции также позволяют использование перечисления в условных операторах, таких как switch и if операторы. Конвертеры позволяют вам использовать 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 векторы или string элементы массива к перечислениям.
Другие методы ведут себя так же к эквивалентной функции, когда используется с перечислениями. Для получения информации об определенном методе см. документацию для этой функции.
Преобразование в char полезно, потому что можно задать участников перечисления с описательными именами. Например:
today = WeekDays.Friday;
['Today is ',char(today)]ans = Today is Friday
Используйте cellstr преобразовывать массив перечисления в массив ячеек char векторы.
ca = cellstr([WeekDays.Tuesday,WeekDays.Thursday]); class(ca)
ans = cell
Обе ячейки в массиве ячеек содержат char векторы:
class([ca{1:2}])ans = char
Выражение, включающее операторы отношения, eq и ne, в котором один операнд является перечислением, позволяют другому операнду иметь тип char. Прежде, чем выполнить операцию, MATLAB® преобразует char векторы к скалярным перечислениям или массивам ячеек char векторы к массивам перечисления.
Классы перечисления, которые выводят из MATLAB встроенные классы, не могут заменить char векторы для участников перечисления.
today = WeekDays.Friday;
today == 'Friday'ans =
1Сравните массив перечисления с char вектор:
wd = [WeekDays.Monday,WeekDays.Wednesday,WeekDays.Friday];
wd == 'Friday'ans =
0 0 1Сравните массив перечисления с массивом ячеек char векторы:
cv = {'Monday','Wednesday','Friday'};
md = [WeekDays.Tuesday,WeekDays.Thursday,WeekDays.Friday];
md ~= cvans =
1 1 0char векторный Wednesday равно (==) участник перечисления WeekDays.Wednesday. Можно использовать это равенство в условных операторах:
today = 'Wednesday'; ... if today == WeekDays.Wednesday disp('Team meeting at 2:00') end
switch ОператорыРавенство (eq) и неравенство (ne) методы позволяют вам использовать участников перечисления в switch операторы. Например, использование WeekDays класс, заданный ранее, создайте оператор switch:
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
Передайте члена WeekDays класс перечисления к Reminder функция:
today = WeekDays.Wednesday; Reminder(today)
ans = Team meeting at 2:00
Для получения дополнительной информации смотрите Объекты В Условных операторах.
char ВекторыКлассы перечисления, которые выводят из MATLAB встроенные классы, не могут заменить 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 должен преобразовать char к перечислению. Избавьте от необходимости это преобразование, если это не необходимо.
Классы перечисления предоставляют методы, чтобы определить членство в наборе.
ismember — Верный для элементов массива перечисления, если в наборе
setdiff — Разность множеств для массивов перечисления
intersect — Установите пересечение для массивов перечисления
setxor — Установите исключительный - или для массивов перечисления
union — Установите объединение для массивов перечисления
Определите, ли сегодня встречающийся день для вашей команды. Создайте группу участников перечисления, соответствующих дням, в которые у команды есть встречи.
today = WeekDays.Tuesday; teamMeetings = [WeekDays.Wednesday WeekDays.Friday];
Используйте ismember определить если today часть teamMeetings набор:
ismember(today,teamMeetings)
ans =
0Смешанные Наборы Перечисления и charЕсли вы передаете и перечисление и char аргументы к методу класса перечисления, класс пытается преобразовать char к классу перечисления.
Определите если char вектор является членом массива перечисления.
teamMeetings = [WeekDays.Wednesday WeekDays.Friday];
ismember('Friday',teamMeetings)ans =
1Определите, является ли участник перечисления членом массива ячеек char векторы.
ismember(WeekDays.Friday,{'Wednesday','Friday'})ans =
1Классы перечисления предоставляют методы, чтобы сравнить участников перечисления с char векторы. Одним из аргументов к методу сравнения строк должен быть 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См. также Метакласс Свойство EnumeratedValues
Чтобы определить, является ли переменная перечислением, используйте 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