MATLABの構造体​内のフィールドの存在​を確認する関数はあり​ますか?

5 ビュー (過去 30 日間)
MathWorks Support Team
MathWorks Support Team 2024 年 11 月 21 日 0:00

'構造体'という特定の名前を持つ構造体が存在するかどうかを確認するには、'exist' 関数を使用します。また、構造体配列内にフィールドが存在するかどうかを確認するには、'isfield' 関数を使用します。しかし、私は構造体の中のどこかにフィールドが存在するかどうかを確認する関数が欲しいです。例えば、以下のコードでは、'isfield' 関数は "c" が "a" のフィールドであることを認識しません。

a.b.c = 1;
isfield(a, 'c')
この結果は以下の通りです:

ans =
0

採用された回答

MathWorks Support Team
MathWorks Support Team 2024 年 11 月 21 日 0:00
MATLABには、構造体の階層全体、またはネストされた構造体を調べてフィールドが存在するかどうかを確認する関数はありません。'isfield' 関数はネストされた構造体の最上位レベルのみを調べます。他のレベルでフィールドが存在するかどうかを確認するには、以下のいずれかの方法を使用できます。
  1. 特定のサブ構造体内にフィールドが存在するかどうかを確認するには、そのサブ構造体に対して 'isfield' を使用します。例では、a.b の値自体が構造体であり、これに対して 'isfield' を呼び出すことができます。
    a.b.c = 1;isfield(a.b, 'c')
    結果は以下の通りです:
    ans = logical 1
    注意:最初の入力引数が構造体配列でない場合、'isfield' は 0 (false)を返します。ドット表記でアクセスできるプロパティを持つ他のMATLABデータ型もありますが、それらは構造体配列ではありません。
  2. ネストされた構造体の任意のレベルでフィールドが存在するかどうかを確認するには、構造体のすべてのレベルを調べる新しい関数を作成します。MATLABエディタを開き、次の関数を貼り付けます。この関数を 'myIsField.m' という名前でMATLABファイルとして保存してください。
    function isFieldResult = myIsField(inStruct, fieldName)

その他の回答 (0 件)

カテゴリ

Help Center および File Exchangeビッグ データの処理 についてさらに検索

タグ

タグが未入力です。

製品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!