Main Content

orderfields

结构体数组的顺序字段

说明

示例

S = orderfields(S1) 按名称对 S1 中的字段排序。

由于字段名称只能包含字母、数字和下划线,此语法按 ASCII 顺序对字段名称进行排序。所有大写字母排在所有小写字母之前。

示例

S = orderfields(S1,S2) 返回 S1 的副本,其字段已重新排序以匹配 S2 的字段顺序。输入结构体数组 S1S2 必须具有相同的字段名称。

示例

S = orderfields(S1,C) 按输入数组 C 匹配名称顺序。S1 中每个字段的名称必须在 C 中出现一次。

示例

S = orderfields(S1,P) 按置换向量 P 匹配顺序。

如果 S1n 个字段,则 P 的元素是从 1n 的整数,按任意顺序排列。例如,如果 S1 有三个字段,P[3 1 2],则 S1 的第三个字段是输出 S 的第一个字段。当需要以相同的方式对多个结构体数组进行排序时,此语法非常有用。

示例

[S,Pout] = orderfields(___) 还返回一个置换向量。Pout 的元素是从 1n 的整数,其排列顺序反映了字段顺序的变化。您可以将此语法与前面语法中的任何输入参数结合使用。

示例

全部折叠

创建一个包含多个字段的结构体。

S1 = struct('b',1,'B',2,'a',3,'A',4)
S1 = struct with fields:
    b: 1
    B: 2
    a: 3
    A: 4

对字段排序。此语法基于 ASCII 顺序按字段名称对字段排序。

S = orderfields(S1)
S = struct with fields:
    A: 4
    B: 2
    a: 3
    b: 1

创建两个结构体,它们具有相同字段,只是字段顺序不同。字段名称相同,但字段值不同。

S1 = struct('b',1,'B',2,'a',3,'A',4)
S1 = struct with fields:
    b: 1
    B: 2
    a: 3
    A: 4

S2 = struct('a',0,'b',20,'B',10,'A',0)
S2 = struct with fields:
    a: 0
    b: 20
    B: 10
    A: 0

S1 中的字段进行排序以匹配 S2 中的字段顺序。

S = orderfields(S1,S2)
S = struct with fields:
    a: 3
    b: 1
    B: 2
    A: 4

创建一个结构体。

data.x = linspace(0,2*pi);
data.y = sin(data.x);
data.title = 'y = sin(x)'
data = struct with fields:
        x: [0 0.0635 0.1269 0.1904 0.2539 0.3173 0.3808 0.4443 0.5077 ... ]
        y: [0 0.0634 0.1266 0.1893 0.2511 0.3120 0.3717 0.4298 0.4862 ... ]
    title: 'y = sin(x)'

通过以元胞数组形式列出字段名称来对字段排序。

C = {'title','x','y'};
data = orderfields(data,C)
data = struct with fields:
    title: 'y = sin(x)'
        x: [0 0.0635 0.1269 0.1904 0.2539 0.3173 0.3808 0.4443 0.5077 ... ]
        y: [0 0.0634 0.1266 0.1893 0.2511 0.3120 0.3717 0.4298 0.4862 ... ]

创建一个结构体。

data.x = linspace(0,2*pi);
data.y = sin(data.x);
data.title = 'y = sin(x)'
data = struct with fields:
        x: [0 0.0635 0.1269 0.1904 0.2539 0.3173 0.3808 0.4443 0.5077 ... ]
        y: [0 0.0634 0.1266 0.1893 0.2511 0.3120 0.3717 0.4298 0.4862 ... ]
    title: 'y = sin(x)'

通过以另一顺序列出字段的原始位置来对字段排序。例如,移动第三个字段,使其成为输出结构体的第一个字段。

P = [3 1 2];
data = orderfields(data,P)
data = struct with fields:
    title: 'y = sin(x)'
        x: [0 0.0635 0.1269 0.1904 0.2539 0.3173 0.3808 0.4443 0.5077 ... ]
        y: [0 0.0634 0.1266 0.1893 0.2511 0.3120 0.3717 0.4298 0.4862 ... ]

创建一个结构体。

data1.x = linspace(0,2*pi);
data1.y = sin(data1.x);
data1.title = 'y = sin(x)';

使用 orderfields 函数对该结构体重新排序。将新字段顺序存储在置换向量 Pout 中。

[S,Pout] = orderfields(data1,{'title','x','y'})
S = struct with fields:
    title: 'y = sin(x)'
        x: [0 0.0635 0.1269 0.1904 0.2539 0.3173 0.3808 0.4443 0.5077 ... ]
        y: [0 0.0634 0.1266 0.1893 0.2511 0.3120 0.3717 0.4298 0.4862 ... ]

Pout = 3×1

     3
     1
     2

创建另一个具有相同字段的结构体。

data2.x = data1.x;
data2.y = cos(data2.x);
data2.title = 'y = cos(x)';

使用 Poutdata2 的字段重新排序。如果您有许多具有相同字段名称的结构体,则可以使用 Pout 以相同的方式对所有这些结构体的字段重新排序。

S2 = orderfields(data2,Pout)
S2 = struct with fields:
    title: 'y = cos(x)'
        x: [0 0.0635 0.1269 0.1904 0.2539 0.3173 0.3808 0.4443 0.5077 ... ]
        y: [1 0.9980 0.9920 0.9819 0.9679 0.9501 0.9284 0.9029 0.8738 ... ]

输入参数

全部折叠

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

以结构体给出的字段顺序,指定为结构体数组。S2S1 具有相同的字段,但以不同顺序指定。

以名称给出的字段顺序,指定为字符向量元胞数组或字符串数组。C 中的名称必须与 S1 的字段名称匹配。

以编号排列的字段顺序,指定为数值向量。编号必须为从 1n 的整数,其中 nS1 的字段数。

输出参数

全部折叠

重新排序后的结构体,以结构体数组形式返回。SS1 具有相同的字段,但字段顺序可能不同。

输出字段顺序,以数值向量形式返回。Pout 的元素是从 1n 的整数,其中 nS1 的字段数。整数的置换表示字段顺序的变化。

提示

  • orderfields 函数仅对顶层字段排序。它不能递归。

扩展功能

版本历史记录

在 R2006a 之前推出