列挙型の演算
列挙型によってサポートされる演算
列挙型では、論理演算、集合メンバー演算および文字列比較演算を使用できます。これらの演算では、switch ステートメントおよび if ステートメントなどの条件付きステートメントでの列挙型の使用もサポートしています。関数 string および char を使用すると、列挙メンバーを string および 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 メソッドはテキスト形式を列挙形式に変換します。サポートされる形式には、string、char ベクトル、string 配列、および char ベクトルの cell 配列が含まれます。以下に例を示します。
f = WeekDays(["Monday" "Friday"])
f =
1×2 WeekDays enumeration array
Monday Friday列挙メンバーを string または char ベクトルに変換
列挙メンバーから string および char ベクトルへの変換は、列挙メンバー名を含むテキストを作成するのに役立ちます。たとえば、関数 string を使用して列挙メンバーを string に変換し、それを文に含めます。
string(WeekDays.Monday) + " is our meeting day."ans =
"Monday is our meeting day."同様の方法で、関数 char を使用します。
['Today is ' char(WeekDays.Friday) '.']
ans =
'Today is Friday.'列挙配列を string 配列または char ベクトルの cell 配列に変換
関数 string を使用して、列挙配列を string 配列に変換します。
sa = [WeekDays.Tuesday WeekDays.Thursday]; string(sa)
ans =
1×2 string array
"Tuesday" "Thursday"cellstr を使用して、列挙配列を char ベクトルの cell 配列に変換します。
ca = cellstr([WeekDays.Tuesday WeekDays.Thursday]); class(ca)
ans =
'cell'
cell 配列の両方のセルに char ベクトルが含まれています。
class([ca{1:2}])ans =
'char'列挙値、string、char ベクトルを使用した関係演算
関係演算子 eq (==) と ne (~=)、および isequal メソッドを使用して、列挙型インスタンスを char ベクトルおよび string と比較できます。
関係演算子 eq および ne
eq および ne を使用して、列挙メンバーとテキスト値を比較します。たとえば、次のように列挙メンバーと string を比較できます。
today = WeekDays.Friday;
today == "Friday"ans = logical 1
列挙配列を 1 つの char ベクトルと比較します。戻り値は、列挙配列のどのメンバーが char ベクトルと等価であるかを示す logical 配列です。
wd = [WeekDays.Monday WeekDays.Wednesday WeekDays.Friday];
wd == 'Friday'ans = 1×3 logical array 0 0 1
この例では、関数 ne を使用して、同じ長さの列挙配列および string 配列の対応する要素を比較します。
sa = ["Monday" "Wednesday" "Friday"]; md = [WeekDays.Tuesday WeekDays.Thursday WeekDays.Friday]; md ~= sa
ans = 1×3 logical array 1 1 0
char ベクトル Wednesday は列挙メンバー WeekDays.Wednesday と等価 (==) です。この等価性を条件付きステートメントで使用できます。
today = 'Wednesday'; ... if today == WeekDays.Wednesday disp('Team meeting at 2:00') end
isequal メソッド
isequal メソッドを使用すると、列挙インスタンスと string、文字ベクトル、string 配列、および文字ベクトルの cell 配列を比較することもできます。
a = WeekDays.Monday;
isequal(a,"Monday")ans =
logical
1列挙配列を単一項目と比較する場合、isequal の動作は eq および ne とわずかに異なります。isequal メソッドでは、比較される 2 つの値のサイズが同じでなければなりません。そのため、列挙配列を char ベクトルまたは string スカラーと比較するときは、テキストが配列内の列挙メンバーのいずれかと一致する場合でも、isequal は false を返します。
wd = [WeekDays.Monday WeekDays.Wednesday WeekDays.Friday];
isequal(wd,"Friday")ans =
logical
0switch ステートメント内の列挙型
等式関数 (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
詳細については、条件付きステートメント内のオブジェクトを参照してください。
string または char ベクトルの置換
string または 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 ベクトルまたは string を使用することができますが、MATLAB® はテキスト形式を列挙型に変換しなければなりません。必要がない場合は、この変換が行われないようにしてください。
列挙型集合メンバー
列挙クラスには集合メンバーの判定を行うメソッドが用意されています。
今日がチームのミーティング日であるかどうかを調べます。チームのミーティング日に対応する列挙メンバーのセットを作成します。
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
列挙メンバーが string 配列のメンバーであるかどうかを判定します。
ismember(WeekDays.Friday,["Wednesday" "Friday"])
ans = logical 1
列挙型テキストの比較メソッド
列挙クラスには、列挙メンバーとテキストを比較するメソッドが用意されています。文字列比較メソッドの引数の 1 つは char ベクトルまたは string でなければなりません。2 つの列挙メンバーを比較すると false が返されます。
列挙メンバーと string または char ベクトルの比較
文字列比較メソッドは、列挙メンバーと char ベクトルおよび string を比較できます。
today = WeekDays.Tuesday;
strcmp(today,'Friday')ans =
0strcmp(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 =
1isenum は空の列挙オブジェクトに対して true を返します。
noday = WeekDays.empty; isenum(noday)
ans =
1クラスが列挙クラスであるかどうかを判定するには、matlab.metadata.Class オブジェクトを使用します。
today = WeekDays.Wednesday; mc = metaclass(today); mc.Enumeration
ans =
1