最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

列挙型の演算

列挙型によってサポートされる演算

列挙型では、論理演算、集合メンバー演算および文字列比較演算を使用できます。これらの演算では、switch ステートメントおよび if ステートメントなどの条件付きステートメントで列挙型を使用することもできます。コンバーターにより、char ベクトルおよび文字列の cell 配列を列挙型として使用することができます。

列挙型クラス

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 ベクトルの cell 配列または string 配列の要素を列挙型に変換します。

その他のメソッドは、列挙型で使用した場合、同等の関数と同じように動作します。特定のメソッドの詳細については、その関数のドキュメンテーションを参照してください。

列挙型メンバーを文字に変換

説明的な名前で列挙型メンバーを定義できるので、char への変換は便利です。以下に例を示します。

today = WeekDays.Friday;
['Today is ',char(today)]
ans =

Today is Friday

列挙型配列を char ベクトルの cell 配列に変換

cellstr を使用して、列挙型配列を char ベクトルの cell 配列に変換します。

ca = cellstr([WeekDays.Tuesday,WeekDays.Thursday]);
class(ca)
ans =

cell

cell 配列の両方のセルに char ベクトルが含まれています。

class([ca{1:2}])
ans =

char

関係演算での列挙型と char ベクトル

1 つのオペランドが列挙型である関係演算子 eq および ne を含む式では、他方のオペランドを char 型にすることができます。演算を実行する前に、MATLAB®char ベクトルをスカラー列挙型に変換するか、または char ベクトルの cell 配列を列挙型配列に変換します。

メモ

MATLAB 組み込みクラスから派生した列挙型クラスは、char ベクトルを列挙型メンバーに置き換えることができません。

today = WeekDays.Friday;
today == 'Friday'
ans =

     1

列挙型配列と char ベクトルを比較します。

wd = [WeekDays.Monday,WeekDays.Wednesday,WeekDays.Friday];
wd == 'Friday'
ans =

     0     0     1

列挙型配列と char ベクトルの cell 配列を比較します。

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 — 列挙型配列の要素が集合内にある場合、true

  • setdiff — 列挙型配列の差集合

  • intersect — 列挙型配列の積集合

  • setxor — 列挙型配列の排他的論理和

  • union — 列挙型配列の和集合

今日がチームのミーティング日であるかどうかを調べます。チームのミーティング日に対応する列挙型メンバーのセットを作成します。

today = WeekDays.Tuesday;
teamMeetings = [WeekDays.Wednesday WeekDays.Friday];

ismember を使用して、todayteamMeetings 集合の一部であるかどうかを判定します。

ismember(today,teamMeetings)
ans = 
     0

列挙型と char の混在集合

列挙型引数と char 引数の両方を列挙型クラス メソッドに渡すと、クラスは char を列挙型のクラスに変換しようとします。

char ベクトルが列挙型配列のメンバーであるかどうかを判定します。

teamMeetings = [WeekDays.Wednesday WeekDays.Friday];
ismember('Friday',teamMeetings)
ans =

     1

列挙型メンバーが char ベクトルの cell 配列のメンバーであるかどうかを判定します。

ismember(WeekDays.Friday,{'Wednesday','Friday'})
ans =

     1

列挙型テキストの比較メソッド

列挙型クラスには、列挙型メンバーと char ベクトルを比較するメソッドが用意されています。文字列比較メソッドの引数の 1 つは char ベクトルでなければなりません。2 つの列挙型メンバーを比較すると 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

関連するトピック