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;
结果:
>> studentstudent = 包含以下字段的 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_studentstruct_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_studentstruct_student = 包含以下字段的 struct:name: "Li Ming"addr: "123 Street"city: 'ShangHai'zip: "123456"age: 23%增加域exams后
>> struct_studentstruct_student = 包含以下字段的 struct:name: "Li Ming"addr: "123 Street"city: 'ShangHai'zip: "123456"age: 23exams: [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_studentstruct_student = 包含以下字段的 struct:name: "Li Ming"addr: "123 Street"city: 'ShangHai'zip: "123456"age: 23exams: [90 89 65]>> struct_student_refieldstruct_student_refield = 包含以下字段的 struct:name: "Li Ming"addr: "123 Street"city: 'ShangHai'age: 23exams: [90 89 65]
4 访问
(1)访问内容
>> struct_studentstruct_student = 包含以下字段的 struct:name: "Li Ming"addr: "123 Street"city: 'ShangHai'zip: "123456"age: 23exams: [90 89 65]
>> struct_student.nameans = "Li Ming">> struct_student.examsans =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";
结果:
>> studentstudent = 包含以下字段的 1×3 struct 数组:nameaddrcityzipage>> 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的函数