Можно использовать логический, членство в наборе и операции сравнения строк на перечислениях. Эти операции также позволяют использование перечисления в условных операторах, такой как 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 ~= cv
ans = 1 1 0
char
векторный 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 = 0
strcmp(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 = 1
isenum
возвращает true
для пустых объектов перечисления:
noday = WeekDays.empty; isenum(noday)
ans = 1
Чтобы определить, является ли класс переменного класса классом перечисления, используйте meta.class
объект.
today = WeekDays.Wednesday; mc = metaclass(today); mc.Enumeration
ans = 1