Matlab 结构体数组 基础知识 struct(自学文档)
struct结构体数组全页展开说明结构体数组是使用名为字段的数据容器将相关数据组合在一起的数据类型。每个字段都可以包含任意类型的数据。可以使用structName.fieldName格式的圆点表示法来访问字段中的数据。创建对象当您有数据要放入新的结构体中时,可以使用圆点表示法创建结构体,每次为结构体命名一个字段:s.a = 1;s.b = {'A','B','C'}s = struct with
struct
结构体数组
说明
结构体数组是使用名为字段的数据容器将相关数据组合在一起的数据类型。每个字段都可以包含任意类型的数据。可以使用 structName.fieldName
格式的圆点表示法来访问字段中的数据。
创建对象
当您有数据要放入新的结构体中时,可以使用圆点表示法创建结构体,每次为结构体命名一个字段:
s.a = 1; s.b = {'A','B','C'}
s = struct with fields: a: 1 b: {'A' 'B' 'C'}
也可以按如下所述,使用 struct
函数创建一个结构体数组。您可以同时指定许多字段,也可以创建一个非标量结构体数组。
语法
s = struct
s = struct(field,value)
s = struct(field1,value1,...,fieldN,valueN)
s = struct([])
s = struct(obj)
说明
s = struct
创建不包含任何字段的标量 (1×1) 结构体。
s = struct(
创建具有指定字段和值的结构体数组。field
,value
)value
输入参数可以是任何数据类型,例如数值、逻辑值、字符或元胞数组。
-
如果
value
不是元胞数组,或者value
是标量元胞数组,则s
是标量结构体。例如,s = struct('a',[1 2 3])
创建一个 1×1 结构体,其中s.a = [1 2 3]
。 -
如果
value
是非标量元胞数组,则s
是维度与value
相同的结构体数组。s
的每个元素包含value
的对应元素。例如,s = struct('x',{'a','b'},'y','c')
返回s(1).x = 'a'
、s(2).x = 'b'
、s(1).y = 'c'
和s(2).y = 'c'
。 -
如果
value
是空元胞数组{}
,则s
是空 (0×0) 结构体。
s = struct(field1,value1,...,fieldN,valueN)
创建多个字段。集合 value1,...,valueN
中的任何非标量元胞数组必须具有相同的维度。
-
如果
value
的所有输入都不是元胞数组,或者value
中作为元胞数组的所有输入都是标量,则s
是标量结构体。 -
如果所有
value
输入都是非标量元胞数组,则s
具有与非标量元胞数组相同的维度。对于类型为标量元胞数组或任何其他数据类型的数组的任何value
,struct
将value
的内容插入s
的所有元素的相关字段中。 -
如果任何
value
输入是空元胞数组{}
,则输出s
是空 (0×0) 结构体。要指定一个空字段并保留其他字段的值,请改用[]
作为value
输入。
s = struct([])
创建不包含任何字段的空 (0×0) 结构体。
s = struct(
创建包含与 obj
)obj
的属性对应的字段名称和值的标量结构体。struct
函数不会转换 obj
,而是将 s
创建为一个新的结构体。此结构体不保留类信息,因此专用、受保护和隐藏的属性在 s
中变为公共字段。struct
函数在您使用此语法时会发出警告。
输入参数
全部折叠
field
- 字段名称
字符向量
字段名称,指定为字符向量。有效字段名称以字母开头,可以包含字母、数字和下划线。字段名称的最大长度是 namelengthmax
函数返回的值。
value
- 值
数组
值,指定为任何类型的数组。如果 value
有任何输入是非标量元胞数组,则所有非标量元胞数组输入必须具有相同的维度。
如果 value
有任何输入是空元胞数组 {}
,则输出是空结构体数组。要指定单个空字段,请使用 []
。
obj
- 对象
标量 | 数组
对象,指定为标量或对象数组。struct
函数将 obj
的属性复制到新标量结构体的字段中。大部分基本数据类型(例如 double
或 char
)都不受支持。请参阅MATLAB 基础类获得基本数据类型的列表。
示例
全部折叠
在结构体中存储相关数据变量
打开实时脚本
在结构体的字段中存储相关数据片段。您可以为这些字段提供对数据进行描述的易读名称。
通过使用圆点表示法添加字段来创建一个结构体。这些字段包含正弦波的 x 值和 y 值以及描述数据的文本。
data.x = linspace(0,2*pi); data.y = sin(data.x); data.title = 'y = sin(x)'
data = struct with fields: x: [1x100 double] y: [1x100 double] title: 'y = sin(x)'
绘制正弦波。您可以按字段名称引用 x 和 y 值的数组。然后添加标题。
plot(data.x,data.y) title(data.title)
具有一个字段的结构体
打开实时脚本
创建包含一个字段的非标量结构体。
field = 'f'; value = {'some text'; [10, 20, 30]; magic(5)}; s = struct(field,value)
s = 3x1 struct array with fields: f
查看每个元素的内容。
s.f
ans = 'some text'
ans = 1×3 10 20 30
ans = 5×5 17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9
访问非标量结构体的字段(例如 s.f
)时,MATLAB® 返回一个逗号分隔的列表。在本示例中,s.f
等效于 s(1).f, s(2).f, s(3).f
。
具有多个字段的结构体
打开实时脚本
创建包含多个字段的非标量结构体。
field1 = 'f1'; value1 = zeros(1,10); field2 = 'f2'; value2 = {'a', 'b'}; field3 = 'f3'; value3 = {pi, pi.^2}; field4 = 'f4'; value4 = {'fourth'}; s = struct(field1,value1,field2,value2,field3,value3,field4,value4)
s = 1x2 struct array with fields: f1 f2 f3 f4
value2
和 value3
的元胞数组是 1×2 数组,因此 s
也是 1×2 数组。因为 value1
是数值数组而不是元胞数组,所以 s(1).f1
和 s(2).f1
具有相同的内容。类似地,因为 value4
的元胞数组具有单一元素,所以 s(1).f4
和 s(2).f4
具有相同的内容。
s(1)
ans = struct with fields: f1: [0 0 0 0 0 0 0 0 0 0] f2: 'a' f3: 3.1416 f4: 'fourth'
s(2)
ans = struct with fields: f1: [0 0 0 0 0 0 0 0 0 0] f2: 'b' f3: 9.8696 f4: 'fourth'
带有空字段的结构体
打开实时脚本
创建包含一个空字段的结构体。使用 []
指定空字段的值。
s = struct('f1','a','f2',[])
s = struct with fields: f1: 'a' f2: []
包含元胞数组的字段
打开实时脚本
创建具有一个字段的一个结构体,该字段包含一个元胞数组。
field = 'mycell'; value = {{'a','b','c'}}; s = struct(field,value)
s = struct with fields: mycell: {'a' 'b' 'c'}
空结构体
打开实时脚本
创建包含多个字段的空结构体。
s = struct('a',{},'b',{},'c',{})
s = 0x0 empty struct array with fields: a b c
为空结构体中的字段赋值。
s(1).a = 'a'
s = struct with fields: a: 'a' b: [] c: []
嵌套结构体
打开实时脚本
创建一个嵌套结构体,其中 a
是具有一个字段的结构体,该字段又包含另一个结构体。
a.b = struct('c',{},'d',{})
a = struct with fields: b: [0x0 struct]
查看 a.b
的字段的名称。
fieldnames(a.b)
ans = 2x1 cell array {'c'} {'d'}
更多推荐
所有评论(0)