下面给出了可以操作结构体字段的其他函数。
names =
fieldnames (struct)
¶names =
fieldnames (obj)
¶names =
fieldnames (javaobj)
¶names =
fieldnames ("javaclassname")
¶返回字符串的元胞数组,其中包含指定输入中字段的名称。
当输入是一个结构体时结构体这个name是结构体的元素。
当输入是Octave对象时obj这个name是对象的公共属性。
当输入是Java对象时javaobj或包含Java类名称的字符串java类名这个name是对象或类的公共字段(数据成员)。
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, field和fidx可以重复输入以修饰嵌套结构体数组元素。结构体数组索引和字段元素索引必须是元胞数组,而字段名称必须跨接。
例如
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
val =
getfield (s, field)
¶val =
getfield (s, sidx1, field1, fidx1, …)
¶获取名为的字段的值field从结构体或嵌套结构体s.
如果s是一个结构体数组sidx选择结构体数组的一个元素,field指定所选元素的字段名,以及fidx选择字段的哪个元素(在数组或元胞数组的情况下)。有关语法的更完整描述,详见setfield
.
sout =
rmfield (s, "f")
¶sout =
rmfield (s, f)
¶返回a复制结构体(数组)的s与现场f远离的。
如果f是字符串的元胞数组或字符数组,请删除每个命名字段。
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, 结构体.
版权所有 © 2024 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号