6.1.4 構造体の操作
構造体のフィールドを操作できる他の関数を以下に示します。
: n = numfields (s)
構造体sのフィールドの数を返します。
See also: fieldnames.
: names = fieldnames (struct)
: names = fieldnames (obj)
: names = fieldnames (javaobj)
: names = fieldnames ("javaclassname")
指定された入力内のフィールドの名前を含む文字列のセル配列を返します。
入力が構造体 structの場合、名前は構造体の要素になります。
入力が Octave オブジェクトobjの場合、名前はオブジェクトのパブリック プロパティになります。
入力が Java オブジェクトjavaobjまたは Java クラスjavaclassnameの名前を含む文字列の場合、名前はオブジェクトまたはクラスのパブリック フィールド (データ メンバー) になります
See also: numfields, isfield, orderfields, struct, properties.
: tf = isfield (x, "name")
: tf = isfield (x, name)
x が構造体であり、 nameという名前の要素が含まれている 場合は true を返します。
nameが文字列のセル配列の場合、同じ次元の論理配列が返されます。
See also: fieldnames.
: sout = setfield (s, field, val)
: sout = setfield (s, sidx1, field1, fidx1, sidx2, field2, fidx2, …, val)
フィールドメンバー fieldが値valに設定された構造体sのコピーを返します。
例えば:
s = struct (); s = setfield (s, "foo bar", 42);
これは次のものと同等である
s.("foo bar") = 42;
s.foo bar = 42フィールド名にスペース文字が含まれているため、有効な Octave 識別子ではないため、通常の構造体構文はここでは使用できないことに注意してください。フィールド名に任意の文字列を使用することはMATLABと互換性がなく、警告 ID が有効になっている場合はこの使用方法で警告が発せられますOctave:language-extension。 を参照してくださいwarning_ids。
2 番目の呼び出し形式では、構造体配列のフィールドを設定します。入力sidx は構造体配列の要素を選択し、field は 選択した要素のフィールド名を指定し、fidx はフィールドの要素を選択します (配列またはセル配列の場合)。sidx、field、およびfidx入力を繰り返して、ネストされた構造体配列要素をアドレス指定できます。構造体配列インデックスとフィールド要素インデックスはセル配列である必要があり、フィールド名は文字列である必要があります。
例えば:
s = struct ("baz", 42);
setfield (s, {1}, "foo", {1}, "bar", 54)
⇒
ans =
scalar structure containing the fields:
baz = 42
foo =
scalar structure containing the fields:
bar = 54
この例は、通常のスカラー構造体から始まり、ネストされたスカラー構造体が追加されます。すべての場合において、構造体のインデックスsidx が指定されていない場合は、デフォルトで 1 (スカラー構造体) になります。したがって、上記の例は次のように簡潔に記述できます 。setfield (s, "foo", "bar", 54)
最後に、ネストされた構造体配列の例を示します。
sa.foo = 1;
sa = setfield (sa, {2}, "bar", {3}, "baz", {1, 4}, 5);
sa(2).bar(3)
⇒
ans =
scalar structure containing the fields:
baz = 0 0 0 5
ここで、sa は構造体配列であり、その要素 1 と 2 のフィールドは、3 番目の要素が単純なスカラー構造体である別の構造体配列です。終端のスカラー構造体には、行列値を含むフィールドがあります。
上記の例と同じ結果は、次の方法でも達成できることに注意してください。
sa.foo = 1; sa(2).bar(3).baz(1,4) = 5
See also: getfield, rmfield, orderfields, isfield, fieldnames, isstruct, struct.
: val = getfield (s, field)
: val = getfield (s, sidx1, field1, fidx1, …)
構造体またはネストされた構造体sから、 fieldという名前のフィールドの値を取得します。
sが構造体配列の場合、 sidx は構造体配列の要素を選択し、field は選択された要素のフィールド名を指定し、fidx はフィールドのどの要素を選択するかを指定します (配列またはセル配列の場合)。構文の詳細な説明については、を参照してくださいsetfield。
See also: setfield, rmfield, orderfields, isfield, fieldnames, isstruct, struct.
: sout = rmfield (s, "f")
: sout = rmfield (s, f)
フィールドfを削除した構造体 (配列) sのコピーを返します 。
fが文字列のセル配列または文字配列の 場合、名前付きフィールドをそれぞれ削除します。
See also: orderfields, fieldnames, isfield.
: sout = orderfields (s1)
: sout = orderfields (s1, s2)
: sout = orderfields (s1, {cellstr})
: sout = orderfields (s1, p)
: [sout, p] = orderfields (…)
フィールドをアルファベット順、または 2 番目の入力で指定された順に並べた s1のコピーを返します。
1 つの入力構造体s1が与えられた場合、フィールド名をアルファベット順に並べます。
2 番目の構造体引数が指定されている場合は、s1のフィールド名をs2に表示されるとおりに並べます。2 番目の引数は、文字列のセル配列cellstr内の順序を指定することもできます。2 番目の引数は、順列ベクトルにすることもできます。
オプションの 2 番目の出力引数pは、元の名前の順序を新しい名前の順序に変換する順列ベクトルです。
例:
s = struct ("d", 4, "b", 2, "a", 1, "c", 3);
t1 = orderfields (s)
⇒ t1 =
scalar structure containing the fields:
a = 1
b = 2
c = 3
d = 4
t = struct ("d", {}, "c", {}, "b", {}, "a", {});
t2 = orderfields (s, t)
⇒ t2 =
scalar structure containing the fields:
d = 4
c = 3
b = 2
a = 1
t3 = orderfields (s, [3, 2, 4, 1])
⇒ t3 =
scalar structure containing the fields:
a = 1
b = 2
c = 3
d = 4
[t4, p] = orderfields (s, {"d", "c", "b", "a"})
⇒ t4 =
scalar structure containing the fields:
d = 4
c = 3
b = 2
a = 1
p =
1
4
2
3
See also: fieldnames, getfield, setfield, rmfield, isfield, isstruct, struct.
: s = substruct (type, subs, …)
subsrefまたはで使用するための添え字構造を作成しますsubsasgn。
For example:
idx = substruct ("()", {3, ":"})
⇒ idx =
scalar structure containing the fields:
type = ()
subs =
{
[1,1] = 3
[1,2] = :
}
x = [1, 2, 3;
4, 5, 6;
7, 8, 9];
subsref (x, idx)
⇒ 7 8 9
注意: キーワードは、インデックス割り当て内または インデックス割り当てにはend使用できません。 subsrefsubsasgn
See also: subsref, subsasgn.