ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Matlab中枚举的运算

2022-03-02 10:02:00  阅读:243  来源: 互联网

标签:向量 运算 Friday WeekDays char 枚举 Matlab today


目录

枚举的运算


枚举的运算

枚举支持的运算

        可以对枚举使用逻辑、集合关系和字符串比较运算。这些运算还允许在条件语句中使用枚举,例如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

标签:向量,运算,Friday,WeekDays,char,枚举,Matlab,today
来源: https://blog.csdn.net/jk_101/article/details/111251922

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有