本节介绍 MATLAB 结构体(struct):在同一变量名下组织多个命名字段,各字段可存放不同类型。若数据表示的是带若干属性的对象(例如学生的姓名、年龄与成绩),用结构体比强行拆成多个平行数组或填入同型数值矩阵更清晰。

手动创建结构体:点号赋值

用点号写字段名直接赋值,字段会随赋值出现:

student(一个结构体) name Riya age 20 scores [88 92 85]
结构体将多个字段组织在同一变量中:student.name、student.age、student.scores 各自保存对应数据,互不影响。
student.name  = 'Riya';
student.age   = 20;
student.scores = [88 92 85];
student

要建一组学生(结构体数组),用下标扩展:

students(1).name = 'Riya';
students(1).age  = 20;
students(2).name = 'Tiya';
students(2).age  = 22;
students
1x2 struct array with fields:
    name
    age

用 struct() 一次性创建

批量创建时,字段值可用 cell 和普通数组搭配:

names = {'Riya', 'Tiya', 'Siya'};
ages  = [20, 22, 19];
students = struct('Name', names, 'Age', ages)
1x3 struct array with fields:
    Name
    Age

访问:读和写字段

students(1).Name     % 取第一个学生的名字
students(2).Age      % 取第二个学生的年龄
students(1).Age = 21;   % 修改

要一次取出所有学生的名字,用花括号解包:

all_names = {students.Name}   % cell:{'Riya','Tiya','Siya'}

判断与增删字段

fieldnames(students)              % {'Name'; 'Age'}
isfield(students, 'Name')         % 1,有 Name 字段
isfield(students, 'Score')        % 0
isstruct(students)                % 1
t = rmfield(students, 'Age')      % 删掉 Age 字段,返回新结构体

动手练习

  • 用点号赋值创建一本书的结构体:书名、作者、价格、页数。
  • 把三个学生建成结构体数组,用 fieldnames 看字段。
  • 用 {students.Name} 一次性取出所有名字。
  • 给结构体数组再追加一个学生,观察它变成 1x4。

本节说明了结构体的点号赋值、struct 批量创建、字段读写、fieldnames 与增删字段等用法。下一节介绍元胞数组:在允许元素类型不一致的前提下,用圆括号与花括号区分访问容器与访问内容。