1 认识结构数组
结构也是一种数据类型,它的每一个元素都有一个名字。称结构中的元素为域。
类似与C语言中的结构体。
2 创建
两种方法:
(1)用赋值语句创建
(2)用函数 struct 函数进行创建
2.1 赋值语句创建
student.name="Li Ming";
student.addr="123 Street";
student.city='ShangHai';
student.zip="123456";
student.age=23;
结果:
>> student
student =
包含以下字段的 struct:
name: "Li Ming"
addr: "123 Street"
city: 'ShangHai'
zip: "123456"
age: 23
2.2 struct 函数创建
函数 struct 允许用户预分配一个结构数据。它的基本形式如下:
structure_array = struct('field1', var1, 'field2', val2, ...)
举例:
struct_student=struct('name',"Li Ming",'addr',"123 Street",'city','ShangHai','zip',"123456",'age',23);
结果:
>> struct_student
struct_student =
包含以下字段的 struct:
name: "Li Ming"
addr: "123 Street"
city: 'ShangHai'
zip: "123456"
age: 23
3 增加删除域
3.1 增加域
如果一个新的域名在结构数组中的任意一个元素中被创建,那么这个域将会增加到数组的所有元素中去。
struct_student=struct('name',"Li Ming",'addr',"123 Street",'city','ShangHai','zip',"123456",'age',23);
%增加域
struct_student.exams=[90,89,65];
结果:
>> struct_student
struct_student =
包含以下字段的 struct:
name: "Li Ming"
addr: "123 Street"
city: 'ShangHai'
zip: "123456"
age: 23
%增加域exams后
>> struct_student
struct_student =
包含以下字段的 struct:
name: "Li Ming"
addr: "123 Street"
city: 'ShangHai'
zip: "123456"
age: 23
exams: [90 89 65]
3.2 删除域rmfield()
方法:
struct2 = rmfield(struct_array, 'field')
示例:
%建立结构体
struct_student=struct('name',"Li Ming",'addr',"123 Street",'city','ShangHai','zip',"123456",'age',23);
%增加域
struct_student.exams=[90,89,65];
%删除域
struct_student_refield=rmfield(struct_student,'zip');
结果:
>> struct_student
struct_student =
包含以下字段的 struct:
name: "Li Ming"
addr: "123 Street"
city: 'ShangHai'
zip: "123456"
age: 23
exams: [90 89 65]
>> struct_student_refield
struct_student_refield =
包含以下字段的 struct:
name: "Li Ming"
addr: "123 Street"
city: 'ShangHai'
age: 23
exams: [90 89 65]
4 访问
(1)访问内容
>> struct_student
struct_student =
包含以下字段的 struct:
name: "Li Ming"
addr: "123 Street"
city: 'ShangHai'
zip: "123456"
age: 23
exams: [90 89 65]
>> struct_student.name
ans =
"Li Ming"
>> struct_student.exams
ans =
90 89 65
>> struct_student.exams(2)
ans =
89
>> mean(struct_student.exams)
ans =
81.3333
(2)访问域名
>> names=fieldnames(student)
names =
5×1 cell 数组
{'name'}
{'addr'}
{'city'}
{'zip' }
{'age' }
5 读取函数getfield和修改函数setfield
(1)getfield函数:field_index 和 array_index 是可选择性,array_index 用于创建1×1 结构数组
f = getfield(array,{array_index},'field',{field_index})
举例:获取student(1)的zip
>> zip1 = getfield(student,{1},'zip')
zip1 =
"123456"
(2)setfield 函数:field_index 和array_index 都是可选择性参数,array_index 用于创建1×1 结构数组
f = setfield(array,{array_index},'field',{field_index},value)
6 应用
建立好几个同学的信息,可以通过再结构名签加下标的方式实现,没有被初始化的域将包含一个空数组,在后面我们可以用赋值语句来初始化这个域:
student.name="Li Ming";
student.addr="123 Street";
student.city='ShangHai';
student.zip="123456";
student.age=23;
student(2).name="Li Yang";
student(3).name="Cheng Xiaoxiao";
结果:
>> student
student =
包含以下字段的 1×3 struct 数组:
name
addr
city
zip
age
>> student(1)
ans =
包含以下字段的 struct:
name: "Li Ming"
addr: "123 Street"
city: 'ShangHai'
zip: "123456"
age: 23
>> student(2)
ans =
包含以下字段的 struct:
name: "Li Yang"
addr: []
city: []
zip: []
age: []
>> student(3)
ans =
包含以下字段的 struct:
name: "Cheng Xiaoxiao"
addr: []
city: []
zip: []
age: []
附1 支持struct的函数