Для перечислений можно использовать логические операции, операции установления принадлежности и операции сравнения строк. Эти операции также поддерживают использование перечислений в условных операторах, таких как switch
и if
операторы. string
и char
функции позволяют преобразовывать представителей перечисления в строки и char
векторы.
Этот раздел использует WeekDays
класс, чтобы проиллюстрировать, как выполнить операции с перечислениями. The 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
The 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.'
ВекторыИспользуйте 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
The char
векторная Wednesday
равно (==
) представитель перечисления WeekDays.Wednesday
. Вы можете использовать это равенство в условных операторах:
today = 'Wednesday'; ... if today == WeekDays.Wednesday disp('Team meeting at 2:00') end
isequal
МетодThe isequal
метод также позволяет проводить сравнения между образцами перечисления и строками, векторами символов, строковыми массивами и массивами ячеек векторов символов.
a = WeekDays.Monday;
isequal(a,"Monday")
ans = logical 1
При сравнении массива перечисления с одним элементом поведение isequal
немного отличается от eq
и ne
. The 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® необходимо преобразовать формат текста в перечисление. Устраните необходимость в этом преобразовании, если в этом нет необходимости.
Классы перечисления обеспечивают методы для определения принадлежности к набору.
Определите, является ли сегодня день встречи для вашей команды. Создайте набор представителей перечисления, соответствующий дням, в которые у команды есть встречи.
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
Для получения дополнительной информации о том, как самоанализирование классов работает с перечислениями, см. Metaclass EnumeratedValues Property.
Чтобы определить, является ли значение перечислением, используйте 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