Matlab中枚举的运算

目录

枚举的运算


枚举的运算

枚举支持的运算

        可以对枚举使用逻辑、集合关系和字符串比较运算。这些运算还允许在条件语句中使用枚举,例如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 转换为枚举。如果没有必要,就不需要进行这种转换。

枚举集合关系

枚举类提供用于确定集合关系的方法。

  • isemenber - 如果枚举数组的元素在集合中,则为 true

  • 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

对枚举的测试

        要确定某变量是否为枚举,请使用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

上一篇:引用类型a=b


下一篇:.bat文件调用java类的main方法