主要内容

struct2table

将结构体数组转换为表

说明

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

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

  • 如果输入是一个具有 n 个字段的 m×11×m 结构体数组,则输出是一个 m×n 表。

示例

T = struct2table(S,Name,Value) 使用由一个或多个 Name,Value 参量指定的其他选项从一个结构体数组创建表。

例如,可以指定要包括在表中的行名称。

示例

示例

全部折叠

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

创建一个结构体数组 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。

使用 "AsArray",true 基于其字段具有不同行数的标量结构体创建一个表。

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

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",false

将标量结构体作为数组处理并转换为表。

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

    "John Doe"      127      {3×3 double}

T 包含一行。

输入参数

全部折叠

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

名称-值参数

全部折叠

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

在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name 引起来。

示例: "RowNames",["row1","row2","row3"] 将行名称 row1row2row3 用于表 T

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

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

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

自 R2021a 起

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

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

或者,在所有版本中,您可以通过设置表的 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 中推出