列挙型の演算
列挙型によってサポートされる演算
列挙型では、論理演算、集合メンバー演算および文字列比較演算を使用できます。これらの演算では、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 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
詳細については、条件付きステートメント内のオブジェクトを参照してください。
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 = 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
クラスが列挙クラスであるかどうかを判定するには、matlab.metadata.Class
オブジェクトを使用します。
today = WeekDays.Wednesday; mc = metaclass(today); mc.Enumeration
ans = 1