6.1.4操作结构体

下面给出了可以操作结构体字段的其他函数。

 
: n = numfields (s)

返回结构体的字段数s.

详见: 字段名.

 
: names = fieldnames (struct)
: names = fieldnames (obj)
: names = fieldnames (javaobj)
: names = fieldnames ("javaclassname")

返回字符串的元胞数组,其中包含指定输入中字段的名称。

当输入是一个结构体时结构体这个name是结构体的元素。

当输入是Octave对象时obj这个name是对象的公共属性。

当输入是Java对象时javaobj或包含Java类名称的字符串java类名这个name是对象或类的公共字段(数据成员)。

详见: numfields, isfield, 订单字段, 结构体, 属性.

 
: tf = isfield (x, "name")
: tf = isfield (x, name)

如果x是一个结构体,它包括一个名为的元素name.

如果name是字符串的元胞数组,则返回equaldimension的逻辑数组。

详见: 字段名.

 
: sout = setfield (s, field, val)
: sout = setfield (s, sidx1, field1, fidx1, sidx2, field2, fidx2, …, val)

返回a复制结构体的s与字段成员field设置为值val.

例如

s=结构体();s=设置字段(s,“foo-bar”,42);

这相当于

s.(“foo-bar”)=42;

请注意,普通结构体语法s.foo bar=42不能在此处使用,因为字段名称从于空格字符的原因而不是有效的Octave标识符。对字段名使用任意字符串与兼容MATLAB,并且如果警告IDoctave:language-extension已启用。详见警告_ids.

使用第二个调用表单,设置结构体数组的字段。Theinputsidx选择结构体数组的元素,field指定选定元素的字段名,以及fidx选择字段的哪个元素(如果是数组或元胞数组)。这个sidx, fieldfidx可以重复输入以修饰嵌套结构体数组元素。结构体数组索引和字段元素索引必须是元胞数组,而字段名称必须跨接。

例如

s=结构体(“baz”,42);setfield(s,{1},“foo”,{1},“bar”,54)⇒  ans=包含字段的标量结构体:baz=42 foo=包含域的标量结构体;bar=54

该示例从一个普通标量结构体开始,其中添加了嵌套标量结构体。在所有情况下,如果结构体索引sidx未指定,则默认为1(标量结构体)。因此,上面的例子可以更简洁地写成setfield(s,“foo”,“bar”,54)

最后,以嵌套结构体数组为例:

sa.foo=1;sa=设置字段(sa,{2},“bar”,{3},“baz”,{1,4},5);sa(2) .巴(3)⇒  ans=包含字段的标量结构体:baz=0 0 5

在这里sa其在元素1和2处的字段被插入另一个结构体数组,其第三元素是简单标量结构体。终端标量结构体具有一个包含amatrix值的字段。

注意,可以通过以下方式获得与上述示例中相同的结果:

sa.foo=1;sa(2) .bar(3).baz(1,4)=5

详见: getfield, rmfield, 订单字段, isfield, 字段名, isstruct, 结构体.

 
: val = getfield (s, field)
: val = getfield (s, sidx1, field1, fidx1, …)

获取名为的字段的值field从结构体或嵌套结构体s.

如果s是一个结构体数组sidx选择结构体数组的一个元素,field指定所选元素的字段名,以及fidx选择字段的哪个元素(在数组或元胞数组的情况下)。有关语法的更完整描述,详见setfield.

详见: setfield, rmfield, 订单字段, isfield, 字段名, isstruct, 结构体.

 
: sout = rmfield (s, "f")
: sout = rmfield (s, f)

返回a复制结构体(数组)的s与现场f远离的。

如果f是字符串的元胞数组或字符数组,请删除每个命名字段。

详见: 订单字段, 字段名, isfield.

 
: sout = orderfields (s1)
: sout = orderfields (s1, s2)
: sout = orderfields (s1, {cellstr})
: sout = orderfields (s1, p)
: [sout, p] = orderfields (…)

返回a复制属于s1其中字段按字母顺序排列或从第二输入指定。

给定一个输入结构体s1,按字母顺序排列字段名称。

如果给定了第二个结构体参数,请将字段名排列在s1出现在s2。第二个参数还可以指定字符串的元胞数组中的顺序cellstr第二个自变量也可以是置换向量。

可选的第二个输出参数</p>是将原始名称顺序转换为新名称顺序的排列向量。

示例:

s=结构体(“d”,4,“b”,2,“a”,1,“c”,3);t1=订单字段⇒ t1=包含字段的标量结构体:a=1 b=2 c=3 d=4
t=结构体(“d”,{},“c”,{},“b”,{},“a”,{});t2=订单字段(s,t)⇒ t2=包含字段的标量结构体:d=4 c=3 b=2 a=1
t3=订单字段(s,[3,2,4,1])⇒ t3=包含字段的标量结构体:a=1 b=2 c=3 d=4
[t4,p]=订单字段(s,{“d”,“c”,“b”,“a”})⇒ t4=包含字段的标量结构体:d=4 c=3 b=2 a=1 p=1 4 2 3

详见: 字段名, getfield, setfield, rmfield, isfield, isstruct, 结构体.

 
: s = substruct (type, subs, …)

创建用于的下标结构体subsrefsubs.

例如

idx=子结构体(“()”,{3,“:”})⇒ idx=包含字段的标量结构体:type=()subs={[1,1]=3[1,2]=:}x=[1,2,3;4,5,6;7,8,9];subsref(x,idx)⇒   7   8   9

注意:关键字终止不能在中使用subsrefsubs用于索引赋值。

详见: subsref, 潜艇.


版权所有 © 2024 Octave中文网

ICP备案/许可证号:黑ICP备2024030411号