zoukankan      html  css  js  c++  java
  • MATLAB中的结构数组

    MATLAB中的结构数组

    结构数组:

        结构是包含一组记录的数据类型,而记录则是存储在相应的字段中。结构的字段可以是任意一种MATLAB数据类型的变量或者对象。结构类型的变量也可以是一维的、二维的或多维的数组。结构数组也称为架构数组。不过,在访问结构类型数据的元素时,需要使用下标配合字段的形式。

        可以在一个数组中放置各类的数据,并且一个结构数组还能是另一个结构数组的一部分。相比较而言,比元胞数组更为强大,也更加富于变化。

        (1)直接赋值法创建结构数组

        

    >> employee.name='tiger';
    >> employee.sex='male';
    >> employee.age='24';
    >> employee.number='12345';
    >> employee

    employee =

          name: 'tiger'
           sex: 'male'
           age: '24'
        number: '12345'

         employee是一种结构。可以容纳更多的元素,可以自由地向结构中加入元素。

         

    >> employee(2).name='lee';
    >> employee(2).sex='female';
    >> employee(2).age='32';
    >> employee(2).number='82356';
    >> employee(2)

    ans =

          name: 'lee'
           sex: 'female'
           age: '32'
        number: '82356'

          

    > employee

    employee =

    1x2 struct array with fields:
        name
        sex
        age
        number

      (2)用struct函数创建结构数组

      使用struct函数,可以根据指定的字段及其相应的值创建结构体数组。此函数的一般形式为:

      str_array=struct('field1',{val1},'field2',{val2}...);

      (3)结构数组中的数据获取

      使用结构数组索引,能获取结构数组中的任何字段值或字段元素。相似地,可以给任何字段或字段单元赋值。在结构数组名后面添加索引范围,可以获取子数组。

      

    >> list.ID=123;
    >> list.sex='male';
    >> list.age=25;
    >> list

    list =

         ID: 123
        sex: 'male'
        age: 25

    >> list(2).ID=456;
    >> list(2).sex='female';
    >> list(2).age=32;;
    >> list2=list(1:2)

    list2 =

    1x2 struct array with fields:
        ID
        sex
        age

    >> list2(1)

    ans =

         ID: 123
        sex: 'male'
        age: 25

    >> str=list2.sex

    str =

    male

    >> ages=[list.age]

    ages =

        25    32

        

        

        

    (4)结构数组中的操作

    对于结构的基本操作其实是对结构数组元素包含记录的操作。主要有结构记录数据的访问、字段的增加和删除等。访问结构数组元素包含记录的方法很简单,直接使用结构数组的名臣和字段的名臣以及操作符“.”完成相应的操作即可。不过,在访问结构数组的元素时,可以使用所谓的“动态”字段的形式。

    Struct_name.(expression)

    >> student=struct('name',{'aaa','bbb'},'age',{23,24},'ID',{001,002},'score',{rand(3)*10,rand(3)*10});
    >> student

    student =

    1x2 struct array with fields:
        name
        age
        ID
        score

    >> student(2).score

    ans =

        7.9221    0.3571    6.7874
        9.5949    8.4913    7.5774
        6.5574    9.3399    7.4313

    >> student(1).score(1,:)

    ans =

        9.6489    9.5717    1.4189

    >> student.name

    ans =

    aaa


    ans =

    bbb

    >> student.('name')

    ans =

    aaa


    ans =

    bbb

    (5)结构操作函数

    struct:创建结构或将其他数据类型转变成结构

    fieldnames:获取结构的字段名称

    getfield:获取结构的字段数据

    setfield:设置结构的字段数据

    rmfield:删除结构的指定字段

    isfield:判断给定的字符串是否为结构的字段名称

    isstruct:判断给定的数据对象是否为结构类型

    orderfields:将结构字段排序

    (6)结构数组的大小

        使用size函数可以获取结构数组或任何结构字段的大小。给定一个结构数组名作为变量,size返回一个数组的维向量。给定array(n).field形式的变量,size函数返回一个包含字段内容大小的向量。

    (7)结构数组的嵌套

        一个结构字段能包含另外一个结构,甚至是另外的结构数组。一旦创建了一个结构,就可以使用struct函数或赋值语句,在已经存在的结构字段中嵌套结构。

        要创建嵌套的的结构有两种方法:一维勇struct函数创建嵌套结构;二是索引嵌套的结构:

        struct函数创建嵌套结构:

        

    >> A=struct('data',[1 2 3;4 5 6],'nest',struct('testnum','test','xdata',[7 8 9],'ydata',[10 11 12]))

    A =

        data: [2x3 double]
        nest: [1x1 struct]

        添加元素

        

    >> A(2).data=[1 3 3;4 5 5];
    >> A.data

    ans =

         1     2     3
         4     5     6


    ans =

         1     3     3
         4     5     5

    >> A(2).nest.testnum='test2';
    >> A(2).nest.xdata=[4 3 2];
    >> A(2).nest.ydata=[6 9 8];
    >> A.nest

    ans =

        testnum: 'test'
          xdata: [7 8 9]
          ydata: [10 11 12]


    ans =

        testnum: 'test2'
          xdata: [4 3 2]
          ydata: [6 9 8]

    >>

    要索引嵌套的结构,用.标记添加嵌套的字段名。索引表达式中的第一个文本字符串确认结构数组,后面的表达式获取包含其他结构的字段名。

    A(1).nest

    A(2).nest.xdata

  • 相关阅读:
    2020了,初/中级前端面试你应该知道的(上)
    Vue页面权限控制和动态添加路由
    Javascript获取数组中最大和最小值
    localStorage和cookie的跨域解决方案
    移动端常见问题汇总
    码云git本地仓库链接远程仓库
    IntelliJ IDEA Activation code亲测可用
    Sping4之注入参数
    Sping4之依赖注入
    Spring核心之IOC
  • 原文地址:https://www.cnblogs.com/yymn/p/4630526.html
Copyright © 2011-2022 走看看