主要内容

struct2table

将结构体数组转换为表

说明

T = struct2table(S) 将结构体数组转换为表。输入结构体的每个字段都成为输出表中的一个变量。

如果输入为:

  • 具有 n 个字段的标量结构体,所有字段都有 m 行,则输出是一个 m×n 表。

    (对于字段具有不同行数的标量结构体,请在下一个语法中使用 AsArray 名称-值参量。)

  • m×1 或 1×m 结构体数组,具有 n 个字段,则输出是一个 m×n 表。每个结构体为输出表的一个对应行提供值。

示例

T = struct2table(S,Name=Value) 可在前面语法中的输入参量外使用一个或多个名称-值参量来指定选项。

例如,您可以通过将 AsArray 设置为 true 来强制 struct2table 将输入视为结构体数组。如果输入是标量结构体,则输出是一个单行表。

示例

示例

全部折叠

使用默认选项将标量结构体转换为表。

创建一个结构体数组 S

S.Name = ["Chang";"Brown";"Ruiz"];
S.Smoker = ["Y";"N";"Y"];
S.SystolicBP = [124;122;130];
S.DiastolicBP = [93;80;92];

标量结构体 S 具有四个字段,每个字段具有三行。

将结构体数组转换为表。

T = struct2table(S)
T=3×4 table
     Name      Smoker    SystolicBP    DiastolicBP
    _______    ______    __________    ___________

    "Chang"     "Y"         124            93     
    "Brown"     "N"         122            80     
    "Ruiz"      "Y"         130            92     

S 中的结构体字段名称成为输出表中的变量名称。T 的大小为 3×4。

将变量的 Name 更改为行名称,方法是修改表属性 T.Properties.RowNames,然后删除变量 Name

T.Properties.RowNames = T.Name;
T.Name = [];

T
T=3×3 table
             Smoker    SystolicBP    DiastolicBP
             ______    __________    ___________

    Chang     "Y"         124            93     
    Brown     "N"         122            80     
    Ruiz      "Y"         130            92     

创建一个非标量结构体数组 S

S(1,1).Name = "Chang";
S(1,1).Smoker = "Y";
S(1,1).SystolicBP = 124;
S(1,1).DiastolicBP = 93;

S(2,1).Name = "Brown";
S(2,1).Smoker = "N";
S(2,1).SystolicBP = 122;
S(2,1).DiastolicBP = 80;

S(3,1).Name = "Ruiz";
S(3,1).Smoker = "Y";
S(3,1).SystolicBP = 130;
S(3,1).DiastolicBP = 92;

S
S=3×1 struct array with fields:
    Name
    Smoker
    SystolicBP
    DiastolicBP

S 是具有四个字段的 3×1 结构体数组。

将结构体数组转换为表。

T = struct2table(S)
T=3×4 table
     Name      Smoker    SystolicBP    DiastolicBP
    _______    ______    __________    ___________

    "Chang"     "Y"         124            93     
    "Brown"     "N"         122            80     
    "Ruiz"      "Y"         130            92     

S 中的结构体字段名称成为输出表中的变量名称。T 的大小为 3×4。

要从字段具有不同行数的标量结构体创建一个表,请将该标量结构体视为结构体数组。

创建一个具有字段 namebillingtest 的标量结构体。

S.name = "John Doe";
S.billing = 127.00;
S.test = [79 75 73; 180 178 177.5; 220 210 205]
S = struct with fields:
       name: "John Doe"
    billing: 127
       test: [3×3 double]

在这种情况下,您无法使用 struct2table(S),因为字段具有不同行数。

此时,请通过设置 AsArray 名称-值参量将输入视为结构体数组。即使字段具有不同行数,此语法也使您能够将标量结构体转换为一个单行表。

T = struct2table(S,AsArray=true)
T=1×3 table
       name       billing        test    
    __________    _______    ____________

    "John Doe"      127      {3×3 double}

输入参数

全部折叠

输入数组,指定为标量结构体或结构体数组。

名称-值参数

全部折叠

将可选参量对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但对各个参量对组的顺序没有要求。

示例: S 是标量结构体时,struct2table(S,AsArray=true)S 转换为一个单行表。

行名称,指定为字符串数组或字符向量元胞数组,其元素为非空且各不相同。行名称的数量必须等于输入数组的行数。

行名称可以包含任何 Unicode® 字符,包括空格和非 ASCII 字符,但冒号字符 : 除外。

如果您指定的行名称包含前导或尾随空白字符,则 struct2table 会将它们从行名称中删除。

维度名称,指定为二元素字符串数组或二元素字符向量元胞数组,其元素为非空且各不相同。

维度名称可以包含任何 Unicode 字符,包括空格和非 ASCII 字符。但是,维度名称不能与任何表变量名称或保留名称 PropertiesRowNamesVariableNames 或冒号字符 : 匹配。

或者,在所有版本中,您可以通过设置表的 DimensionNames 属性来指定维度名称。

将输入视为结构体数组的标志,指定为数值或逻辑值 1 (true) 或 0 (false)。

true

如果输入是非标量结构体数组,则此值为默认值

将结构体数组转换为一个表,每个结构体对应一行,结构体数组的每个字段对应一个变量。这些字段可以有不同大小。

如果字段 S(1:m).fieldname 中的值具有:

  • 兼容的大小和数据类型,并且每个值都有一行,则对应的表变量是同构数组

    示例:

    S(1).a = [1 2]
    S(2).a = [3 4]
    S(1).b = 5
    S(2).b = 6
    T = struct2table(S)
    
    T =
      2×2 table
          a       b
        ______    _
        1    2    5
        3    4    6
    
  • 不同大小、不兼容的数据类型或任何值都有多行,则对应的表变量是元胞数组

    示例:

    S(1).a = [1 2]
    S(2).a = [3 4 5 6]
    S(1).b = 7
    S(2).b = 8
    T = struct2table(S)
    
    T =
      2×2 table
             a         b
        ___________    _
        {[    1 2]}    7
        {[3 4 5 6]}    8
    

false

如果输入是标量结构体,则此值为默认值

将具有 n 个字段的标量结构体转换为 m×n 表。每个字段必须具有 m 行。

示例:

S.a = [1;2;3]
S.b = [4 5;6 7;8 9]
T = struct2table(S)
T =
  3×2 table
    a      b   
    _    ______
    1    4    5
    2    6    7
    3    8    9

输出参量

全部折叠

输出表,以表形式返回。该表可以存储元数据,例如描述、变量单位、变量名称和行名称。有关详细信息,请参阅 table 的“属性”部分。

扩展功能

全部展开

基于线程的环境
使用 MATLAB® backgroundPool 在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool 加快代码运行速度。

版本历史记录

在 R2013b 中推出