Можно использовать логический, членство в наборе и операции сравнения строк на перечислениях. Эти операции также поддерживают использование перечислений в условных операторах, такой как 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 Friday
char
ВекторыПреобразование членов перечисления к строкам и 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 0
switch
ОператорыРавенство (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 = 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