Matlab-结构数组

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的函数

 

  • 19
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值