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

조회 수: 1 (최근 30일)
MathWorks Support Team
MathWorks Support Team 대략 13시간 전
답변: MathWorks Support Team 대략 6시간 전

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

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

ans =
0

채택된 답변

MathWorks Support Team
MathWorks Support Team 대략 13시간 전
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 CenterFile Exchange에서 ビッグ データの処理에 대해 자세히 알아보기

태그

아직 태그를 입력하지 않았습니다.

제품

Community Treasure Hunt

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

Start Hunting!