Можно использовать логический, членство в наборе и операции сравнения строк на перечислениях. Эти операции также поддерживают использование перечислений в условных операторах, такой как 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® должен преобразовать текстовый формат в перечисление. Избавьте от необходимости это преобразование, если это не необходимо.
Классы перечисления предоставляют методы, чтобы определить членство в наборе.
ismember — Верный для элементов массива перечисления, если в наборе
setdiff — Разность множеств для массивов перечисления
intersect — Установите пересечение для массивов перечисления
setxor — Установите исключительный - или для массивов перечисления
union — Установите объединение для массивов перечисления
Определите, ли сегодня встречающийся день для вашей команды. Создайте группу членов перечисления, соответствующих дням, в которые у команды есть встречи.
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Для получения дополнительной информации о том, как самоанализ класса работает с перечислениями, смотрите Метакласс Свойство 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