在Matlab中,结构是包含一组记录的数据类型,记录是存储在相应的字段中,结构的字段可以是任意一种类型的变量或者对象,结构类型的变量可以是一维的、二维的或者多维的数组,在访问结构类型数组的元素时,需要使用下标配合字段的形式。下表展现了元胞数组与结构数组的异同:
内容 | 元胞数组对象 | 结构数组对象 |
---|---|---|
基本元素 | 元胞 | 结构 |
基本索引 | 全下标方式、单下标方式 | 全下标方式、单下标方式 |
可包含的数据类型 | 任何数据类型 | 任何数据类型 |
数据的存储 | 元胞 | 字段 |
访问元素的方法 | 花括号和索引 | 圆括号、索引、字段名 |
数据的创建的方法主要有直接赋值法和利用struct函数创建。
直接赋值法创建结构:直接用结构的名称,配合操作符‘.’和相应的字段的名称完成创建,创建是直接给字段赋具体的数值。还可以用直接赋值法创建结构数组。
Stu.name='Dong';
Stu.age=18;
Stu.grade=uint16(1);
whos
Stu
Stu
Name Size Bytes Class Attributes
A 1x6 976 cell
A1 1x1 8 double
A2 1x1 8 double
A3 1x1 8 double
B 1x6 6 logical
C 1x6 48 double
D 3x4 96 double
E 2x2 544 cell
F 1x3 24 double
Stu 1x1 546 struct
ans 1x6 12 char
Stu =
name: 'Dong'
age: 18
grade: 1
Matlab中,还可以利用struct函数创建结构,struct函数的基本语法如下:
Struct-name=struct(field1,val1,feild2,val2,…)
Struct-name=struct(field1,{val1},field2,{val2},…)
在实际中,在Matlab中一般是不能直接使用这个函数的,因为Matlab无法识别每一个field的性质,所以Matlab是无法判断直接给出的value值是否是合法的。为了确保不出错,一般可以这样处理:先给每一个field赋值,每一个field都赋值完成后,再使用struct()函数。再写作形式上,field与相应的value同名,这样一来必是合法的写作形式。这可以看作是struct()函数中field与value的一致性。
example:
Student=struct('name',{'Deni','Sherry'},'age',{22,24},'grade',{2,3})
Student =
1x2 struct array with fields:
name
age
grade
结构的基本操作:
对于结构的基本操作其实是对结构数组元素包含的记录的操作,主要有结构记录数据的访问、字段的增加和删除。
访问结构数组元素包含的记录的方法如下:
1.直接使用结构数组的名称和字段的名称以及操作符‘.’完成相应的操作;
2.使用‘动态’字段的形式:利用动态字段形式访问结构数组元素,便于利用函数完成对结构字段数组的重复操作。
内嵌结构:当结构的字段记录了结构时,则称其为内嵌结构。创建内嵌结构可以使用直接赋值的方法,也可以使用struct函数完成。
Student=struct('name',{'Deni','Sherry'},'age',{22,24},'grade',{2,3},'score',{rand(3)*10,randn(3)*10});
Student
Student(2).score
Student(2).score(1,:)
Student.name
Student.('name')
Student =
1x2 struct array with fields:
name
age
grade
score
ans =
-7.6967 11.1736 5.5253
3.7138 -10.8906 11.0061
-2.2558 0.3256 15.4421
ans =
-7.6967 11.1736 5.5253
ans =
Deni
ans =
Sherry
ans =
Deni
ans =
Sherry
结构操作函数:
函数 | 说明 |
---|---|
struct | 创建结构或其他数据类型转变成结构 |
fieldnames | 获取结构的字段名称 |
getfield | 获取结构字段的数据 |
setfield | 设置结构字段的数据 |
rmfield | 删除结构的指定字段 |
isfield | 判断给定的字符串是否为结构的字段名称 |
isstruct | 判断给定的数据对象是否为数据类型 |
oderfields | 将结构字段排序 |
参考:《MATLAB GUI程序设计》王广、邢林芳