除了索引运算符.
,Octave可以使用动态命名(var)
或者struct
函数来创建结构体。动态命名使用变量的字符串值作为字段名。例如
a=“field2”;x.a=1;x.(a)=2;x⇒ x={a=1字段2=2}
动态索引还允许您使用任意字符串,而不仅仅是有效的Octave标识符(请注意,这在MATLAB):
a=“带空格的长字段(和有趣的char$)”;x.a=1;x.(a)=2;x⇒ x={a=1个带空格的长字段(和有趣的char$)=2}
警告idoctave:language-extension
可以启用以警告这种用法。详见警告_ids.
更现实地说,所有对字符串进行操作的函数都可以用于在将字段名输入到数据结构之前构建正确的字段名。
names=[“Bill”;“Mary”;“John”];年龄=[37;26;31];对于i=1:行(名称)数据库。(姓名(i,:))=年龄(i);endfordatabase⇒ 数据库={Bill=37 Mary=26 John=31}
创建结构体的第三种方法是struct
命令struct
采用参数对,其中参数对中的第一个参数是要包含在结构体中的字段名,第二个参数是标量或元胞数组,表示要包含在该结构体或结构体数组中的值。例如:
结构体(“field1”,1,“field2”,2)⇒ ans={field1=1 field2=2}
如果传递给的值struct
是标量和cellarray的混合,然后扩展标量参数以创建具有一致维度的结构体数组。例如
s=结构体(“field1”,{1,“one”},“field2”,{2,“two”}、“field3”,3);s.field1⇒ ans=1 ans=1字段2⇒ ans=2 ans=twos.field3⇒ ans=3 ans=3
如果要创建一个结构体,其中包含一个元胞数组作为单个字段,则必须将其包在另一个元胞数组中,如下例所示:
结构体(“field1”,{{1,“one”}},“field2”,2)⇒ ans={field1={[1,1]=1[1,2]=一}field2=2}
s =
struct ()
¶s =
struct (field1, value1, field2, value2, …)
¶s =
struct (obj)
¶创建标量或数组结构体并初始化其值。
这个字段1, 字段2,…变量是指定字段名称的字符串值1, 值2,…变量可以是任何类型。
如果这些值是元胞数组,请创建一个结构体数组并初始化其值。每个值的元胞数组的维度必须匹配。重复使用单个数组和非数组值,以填充整个数组。如果数组为空,请使用指定的字段名称创建一个空结构体数组。
如果参数是对象,则返回基础结构体。
观察语法是否针对struct进行了优化数组。考虑以下示例:
结构体(“foo”,1)⇒ 包含字段的标量结构体:foo=1struct(“foo”,{})⇒ 0x0结构体数组,包含以下字段:foostruct(“foo”,{{}})⇒ 包含字段的标量结构体:foo={}(0x0)struct(“foo”,{1,2,3})⇒ 包含字段的1x3结构体数组:foo
第一种情况是一个普通的标量结构体——一个字段,一个值。从于传递了一个从结构体数组值组成的空元胞数组,因此秒生成一个只有一个字段且没有值的空结构体数组。当值是包含单个条目的元胞数组时,它将成为一个标量结构体,该结构体将单个条目作为字段的值。那个条目恰好是一个空的元胞数组。
最后,如果该值是一个非标量元胞数组,那么struct
生成一个结构体数组.
详见: cell2struct, 字段名, getfield, setfield, rmfield, isfield, 订单字段, isstruct, structfun.
函数isstruct
可用于测试对象是structure还是structure数组。
版权所有 © 2024 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号