MATLAB - 结构体



在 MATLAB 中,结构体数组是一种强大的数据结构,它允许您使用字段和索引的组合来组织和操作相关数据的集合。结构体数组提供了一种有效的方式来管理和处理具有不同属性的多个类似数据的实例,使其成为从数据存储到复杂分析的各种任务必不可少的工具。

结构体数组是一个数组,其中每个元素都是一个结构体。数组中的每个结构体可以包含多个字段,这些字段保存不同类型的数据,包括数字、文本、逻辑值,甚至其他结构体。当您有一组具有不同特征的类似对象时,结构体数组特别有用。

MATLAB struct() 函数

在 MATLAB 中,struct() 函数提供了一种方便且通用的方法来创建结构体数组。

语法

s = struct(field,value)

struct() 函数使您能够通过在单个调用中指定字段名称和相应的值来创建结构体数组。

创建结构体数组

让我们看看一个使用 struct() 函数创建结构体数组的简单示例。

示例

让我们创建一个存储学生姓名和年龄信息的结构体数组。

names = {'Riya', 'Tiya', 'Siya'}
ages = [20, 22, 19]
students = struct('Name', names, 'Age', ages)

在这个示例中,student 结构体数组有两个字段,“Name”和“Age”,使用元胞数组和数值数组分配相应的值。

当您在 MATLAB 命令窗口中执行相同的操作时,输出为 -

>> names = {'Riya', 'Tiya', 'Siya'}
ages = [20, 22, 19]
students = struct('Name', names, 'Age', ages)

names =
{
  [1,1] = Riya
  [1,2] = Tiya
  [1,3] = Siya
}

ages =

    20    22    19


students = 

  1x3 struct array with fields:

    Name
    Age

结构体数组中的多个字段

这是一个向结构体数组添加多个字段的示例。

以下是我们将作为字段和值的数据。

field1 = 'a1'; value1 = zeros(1,10); - 这将创建一个名为“a1”的字段,并将一个包含 10 个元素的零数值数组分配给 value1。

field2 = 'a2'; value2 = {'a', 'b'}; - 这将定义一个名为“a2”的字段,并将包含字符字符串“a”、“b”的元胞数组分配给 value2。

field3 = 'a3'; value3 = {pi, pi.^2}; - 这将声明一个名为“a3”的字段,并将一个包含两个元素的元胞数组分配给 value3:数学常数 pi 和 pi 的平方 (pi^2)。

field4 = 'a4'; value4 = {'testing'}; - 这将建立一个名为“a4”的字段,并将包含字符串“testing”的元胞数组分配给 value4。

field1 = 'a1';  value1 = zeros(1,10);
field2 = 'a2';  value2 = {'a', 'b'};
field3 = 'a3';  value3 = {pi, pi.^2};
field4 = 'a4';  value4 = {'testing'};

s = struct(field1,value1,field2,value2,field3,value3,field4,value4)

当您执行上述代码时,生成的结构体 s 包含四个字段:“a1”、“a2”、“a3”和“a4”。

>> field1 = 'a1';  value1 = zeros(1,10);
field2 = 'a2';  value2 = {'a', 'b'};
field3 = 'a3';  value3 = {pi, pi.^2};
field4 = 'a4';  value4 = {'testing'};

s = struct(field1,value1,field2,value2,field3,value3,field4,value4)

s = 

  1x2 struct array with fields:

   a1
   a2
   a3
   a4

我们为 value2 和 value 2 使用了元胞数组,大小为 1×2,因此 s 的大小为 1×2

因此,s(1) 和 s(2) 的输出如下所示 -

s(1)

>> s(1)

ans = 

  struct with fields:

    a1: [0 0 0 0 0 0 0 0 0 0]
    a2: 'a'
    a3: 3.1416
    a4: 'testing'

s(2)

>> s(2)

ans = 

  struct with fields:

    a1: [0 0 0 0 0 0 0 0 0 0]
    a2: 'b'
    a3: 9.8696
    a4: 'testing'

以下列出了与结构体一起使用时,可在代码中为您提供帮助的一些内置函数。

函数 描述
fieldnames() 此方法将给出结构体中使用的字段名称。
isfield() 此方法检查给定的输入字段是否属于结构体。
isstruct() 此方法将告诉您给定的输入是否为结构体数组。
rmfield() 此方法从结构体数组中删除给定的字段。

fieldnames()

此方法将返回结构体的字段名称。

语法

fields = fieldnames(S)

让我们首先创建一个结构体,并在其上使用 fieldnames() 函数。

names = {'Riya', 'Tiya', 'Siya'};
ages = [20, 22, 19];
students = struct('Name', names, 'Age', ages);
fieldnames(students)

当您在 MATLAB 中执行代码时,输出为 -

>> names = {'Riya', 'Tiya', 'Siya'};
ages = [20, 22, 19];
students = struct('Name', names, 'Age', ages);
fieldnames(students)

ans =
{
  [1,1] = Name
  [2,1] = Age
}

isfield()

如果给定的字段名称是结构体中的字段,则此方法将返回 1,如果不是,则返回 0。

语法

res = isfield(S,field)

此处,S 是结构体数组,field 是您正在检查的字段名称,以确定它是否是结构体数组 S 中的字段。

示例

names = {'Riya', 'Tiya', 'Siya'};
ages = [20, 22, 19];
students = struct('Name', names, 'Age', ages);
isfield(students, 'Names')

当您在 MATLAB 中测试代码时,输出为 -

>> names = {'Riya', 'Tiya', 'Siya'};
ages = [20, 22, 19];
students = struct('Name', names, 'Age', ages);
isfield(students, 'Name')

ans = 0

isstruct()

如果给定的输入是结构体数组,则该函数返回逻辑 1(真),否则返回逻辑 0(假)。

语法

a = isstruct(A)

示例

names = {'Riya', 'Tiya', 'Siya'};
ages = [20, 22, 19];
students = struct('Name', names, 'Age', ages);
isstruct(students)

当您在 MATLAB 命令窗口中执行相同的操作时。

>> names = {'Riya', 'Tiya', 'Siya'};
ages = [20, 22, 19];
students = struct('Name', names, 'Age', ages);
isstruct(students)

ans = 1

让我们为 isstruct() 函数提供一些与结构体数组不同的输入。

示例

A = [1,2,3;4,5,6;7,8,9]
isstruct(A)

当您在 MATLAB 命令窗口中执行上述代码时,输出为 -

>> A = [1,2,3;4,5,6;7,8,9]
isstruct(A)

A =

   1   2   3
   4   5   6
   7   8   9

ans = 0

rmfield()

该函数将从结构体数组中删除给定的字段。

语法

s = rmfield(S,field)

此处,S 是结构体数组,field 是您要从结构体数组中删除的字段名称。

示例

field1 = 'a1';  value1 = zeros(1,10);
field2 = 'a2';  value2 = {'a', 'b'};
field3 = 'a3';  value3 = {pi, pi.^2};
field4 = 'a4';  value4 = {'testing'};

s = struct(field1,value1,field2,value2,field3,value3,field4,value4)
t = rmfield(s, field4)

当您在 MATLAB 中执行上述代码时,输出为 -

>> field1 = 'a1';  value1 = zeros(1,10);
field2 = 'a2';  value2 = {'a', 'b'};
field3 = 'a3';  value3 = {pi, pi.^2};
field4 = 'a4';  value4 = {'testing'};

s = struct(field1,value1,field2,value2,field3,value3,field4,value4)
t = rmfield(s, field4)

s = 

  1x2 struct array with fields:

    a1
    a2
    a3
    a4


t = 

  1x2 struct array with fields:

    a1
    a2
    a3
广告