Programming with MATLAB | ![]() ![]() |
構造体配列内のデータのアクセス
構造体配列のインデックスを使って、構造体配列内の任意のフィールドやフィールド要素を取得することができます。同様に、任意のフィールドやフィールド要素に値を設定することができます。この節の例として、つぎの構造体を考えます。
標準のサブスクリプトを構造体配列名に加えることで、サブ配列にアクセスできます。たとえば、つぎのステートメントは、1行2列の構造体配列になります。
mypatients = patient(1:2) 1x2 struct array with fields: name billing test
mypatients
配列の中の最初の構造体は、patients
配列の中の最初の構造体と同じです。
mypatients(1) ans = name: 'John Doe' billing: 127 test: [3x3 double]
特別な構造体のフィールドにアクセスするため、構造体配列名の後にピリオド(.)、その後にフィールド名を設定します。
str = patient(2).name str = Ann Lane
フィールド内の要素にアクセスするためには、フィールド名に適切なインデックス付けのメカニズムを追加してください。すなわち、フィールドが配列を含めば、配列のサブスクリプトを使ってください。フィールドがセル配列を含めば、セル配列のサブスクリプトを使ってください。
test2b = patient(3).test(2,2) test2b = 153
たとえば、構造体のフィールドに値を代入するために同じ表記法を使ってください。
patient(3).test(2,2) = 7;
複数の構造体に対して、一度にフィールド値を抽出することができます。たとえば、つぎのラインは、billing
フィールドのすべてを含む1行3列のベクトルを作成します。
bills = [patient.billing] bills = 127.0000 28.5000 504.7000
同様に、最初の2つの構造体に対して、test
データを含むセル配列を作成することができます。
tests = {patient(1:2).test} tests = [3x3 double] [3x3 double]
setfieldとgetfieldを使って、フィールド値にアクセスする
直接インデックス法は、通常フィールド値を代入したり、取得するための最も効率の良い方法です。しかし、文字列としてのみフィールド名がわかっている場合、たとえば、M-ファイル内でフィールド名を得るために関数
fieldnames
を使った場合、同じことを行うために関数setfield
と関数getfield
を使うことができます。
getfield
は、フィールド、または,フィールド要素から値を得ます。
f = getfield(array,{array_index},'field',{field_index})
ここで、field_index
はオプションで、array_index
は、1行1列の構造体配列に対するオプションです。関数シンタックスは、つぎの式に対応します。
f
=array(array_index).field(field_index)
;
たとえば、patient
配列の2番目の構造体のname
フィールドにアクセスするためには、つぎの式を使います。
str = getfield(patient,{2},'name')
同様に、setfield
は、つぎの構文を使って、フィールドに値を代入します。
f = setfield(array,{array_index},'field',{field_index},value)
![]() |
構造体配列の作成 | 構造体配列を使った関数sizeの使用 | ![]() |