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。