MATLABstruct函数(结构体数组)
⽂章⽬录
语法
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 函数在您使⽤此语法时会发出警告
输⼊参数
filed :字段名称
字段名称,指定为字符向量或字符串标量。有效字段名称以字母开头,可以包含字母、数字和下划线。字段名称的最⼤长度是namelengthmax 函数返回的值
value:值
值,指定为任何类型的数组。如果 value 有任何输⼊是⾮标量元胞数组,则所有⾮标量元胞数组输⼊必须具有相同的维度。如果 value 有任何输⼊是空元胞数组 {},则输出是空结构体数组。要指定单个空字段,请使⽤ []。
结构体数组不能作为参数传递给函数obj:对象
对象,指定为标量或对象数组。struct 函数将 obj 的属性复制到新标量结构体的字段中。struct 函数不能基于⼤多数基本数据类型创建结构体。例如,如果 obj 具有 double 或 char 数据类型,则 struct 会发出错误消息。但是,struct会将表或时间表的属性以结构体形式返回。
⽰例
例1: 在结构体中存储相关数据变量
%通过使⽤圆点表⽰法添加字段来创建⼀个结构体
data.x = linspace(0,2*pi);
data.y = sin(data.x);
data.title = 'y = sin(x)'
结果如下所⽰:
%绘制正弦波,这⾥按字段名称引⽤ x 和 y 值的数组,然后添加标题
plot(data.x,data.y)
title(data.title)
结果如下所⽰:
例2: 具有⼀个字段的结构体
%创建包含⼀个字段的⾮标量结构体
field = 'f';
value = {'some text';
[10, 20, 30];
magic(5)};
s = struct(field,value)
%查看每个元素的内容
s.f
结果如下所⽰:
%访问⾮标量结构体的字段(例如 s.f)时,MATLAB返回⼀个逗号分隔的列表
%在本⽰例中,s.f 等效于 s(1).f, s(2).f, s(3).f
例3: 具有多个字段的结构体
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)
%value2 和 value3 的元胞数组是 1×2 数组,因此 s 也是 1×2 数组
%因为 value1 是数值数组⽽不是元胞数组,所以 s(1).f1 和 s(2).f1 具有相同的内容
%类似地,因为 value4 的元胞数组具有单⼀元素,所以 s(1).f4 和 s(2).f4 具有相同的内容
结果如下所⽰:
例4: 带有空字段的结构体
%创建包含⼀个空字段的结构体。使⽤ [] 指定空字段的值
s = struct('f1','a','f2',[])
结果如下所⽰:
例5: 包含元胞数组的字段
field = 'mycell';
value = {{'a','b','c'}};
s = struct(field,value)
结果如下所⽰:
例6: 空结构体
%创建包含多个字段的空结构体
s = struct('a',{},'b',{},'c',{})
结果如下所⽰:
例7: 嵌套结构体
%创建⼀个嵌套结构体,其中a是具有⼀个字段的结构体,该字段⼜包含另⼀个结构体a.b = struct('c',{},'d',{})
%查看 a.b 的字段的名称
fieldnames(a.b)
结果如下所⽰:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。