Для перечислений можно использовать логические операции, операции установления принадлежности и операции сравнения строк. Эти операции также поддерживают использование перечислений в условных операторах, таких как 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 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.' ВекторыИспользуйте 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
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® необходимо преобразовать формат текста в перечисление. Устраните необходимость в этом преобразовании, если в этом нет необходимости.
Классы перечисления обеспечивают методы для определения принадлежности к набору.
Определите, является ли сегодня день встречи для вашей команды. Создайте набор представителей перечисления, соответствующий дням, в которые у команды есть встречи.
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Для получения дополнительной информации о том, как самоанализирование классов работает с перечислениями, см. Metaclass EnumeratedValues Property.
Чтобы определить, является ли значение перечислением, используйте 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