结构体

优质
小牛编辑
137浏览
2023-12-01

结构体是MATLAB的多维数组,其元素取决于原文的域指示符。例如,

    S.name = 'Ed Plum';
    S.score = 83;
    S.grade = 'B+'
    

创建一个含三个域的标量结构体。

    S = 
         name: 'Ed Plum'
        score: 83
        grade: 'B+'
    

和MATLAB的其他一切一样,结构体是数组,故可以插入附加元素。在此情况下,数组的每个元素都是带有若干域的结构体。域可以逐个加起来,

    S(2).name = 'Toni Miller';
    S(2).score = 91;
    S(2).grade = 'A-';
    

或者,完整元素可以由单个语句相加得到。

    S(3) = struct('name','Jerry Garcia',...
                   'score',70,'grade','C')
    

现在,结构体足够大,可以输出摘要了。

    S = 
    1x3 struct array with fields:
        name
        score
        grade
    

有几种方法可以把不同域集合到其他MATLAB数组里。它们都是基于逗号分开的列表的符号。若输入

    S.score
    

等于输入

    S(1).score, S(2).score, S(3).score
    

这就是逗号分开的列表。没有任何其他标点,它不是很有用。这样,它把三个分数值依次赋给默认变量ans,并正确无误地输出每个赋值结果。但当你用方括号把表达式括起来时,

    [S.score]
    

就等同于

    [S(1).score, S(2).score, S(3).score]
    

生成一个包含所有分数的行向量。

    ans =
        83    91    70
    

类似地,输入

    S.name
    

只依次把姓名赋值给ans。但若嵌入花括号,

    {S.name}
    

则产生一个包含三个名字的1*3单元数组,

    ans = 
        'Ed Plum'    'Toni Miller'    'Jerry Garcia'
    

    char(S.name)
    

调用char函数,用三个变元从姓名域创立一个字符数组,

    ans =
    Ed Plum
    Toni Miller
    Jerry Garcia