Операции на перечислениях

Операции, поддержанные перечислениями

Можно использовать логический, членство в наборе и операции сравнения строк на перечислениях. Эти операции также позволяют использование перечисления в условных операторах, таких как операторы 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

Протестируйте равенство, чтобы реализовать операторы if. Вектор 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

Для получения дополнительной информации смотрите Объекты В Условных операторах.

Замена символьными Векторами

Примечание

Классы перечисления, которые выводят от 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 Разность множеств для массивов перечисления

  • пересечение Установите пересечение для массивов перечисления

  • setxor — исключительный Набор - или для массивов перечисления

  • объединение Установите объединение для массивов перечисления

Определите, ли сегодня встречающийся день для вашей команды. Создайте группу участников перечисления, соответствующих дням, в которые у команды есть встречи.

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.

  • strcmp Сравните участников перечисления

  • strncmp Сравните первые n символы участников перечисления

  • strcmpi Нечувствительное к регистру сравнение участников перечисления

  • strncmpi Нечувствительное к регистру первое n символьное сравнение участников перечисления

Сравнение участника Перечисления с символьным Вектором

Методы сравнения строк могут сравнить участников перечисления и векторы 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

Похожие темы

Была ли эта тема полезной?