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

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

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

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

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

Замените char Векторы

Примечание

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

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

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

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

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

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 Вектор

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

Похожие темы