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

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

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

Преобразуйте массивы перечислений в Строковые массивы или ячеек 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

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® необходимо преобразовать формат текста в перечисление. Устраните необходимость в этом преобразовании, если в этом нет необходимости.

Членство в наборе перечислений

Классы перечисления обеспечивают методы для определения принадлежности к набору.

  • ismember - True для элементов массива перечисления, если в наборе

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

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

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

  • 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.

  • 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

Для получения дополнительной информации о том, как самоанализирование классов работает с перечислениями, см. 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

Похожие темы