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 0.5712 0.6347 0.6981 0.7616 0.8251 0.8885 0.9520 1.0155 1.0789 1.1424 1.2059 1.2693 1.3328 1.3963 1.4597 1.5232 1.5867 1.6501 1.7136 1.7771 1.8405 1.9040 1.9675 ... ] (1x100 double)
        y: [0 0.0634 0.1266 0.1893 0.2511 0.3120 0.3717 0.4298 0.4862 0.5406 0.5929 0.6428 0.6901 0.7346 0.7761 0.8146 0.8497 0.8815 0.9096 0.9341 0.9549 0.9718 0.9848 0.9938 0.9989 0.9999 0.9969 0.9898 0.9788 0.9638 0.9450 0.9224 ... ] (1x100 double)
    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 0.5712 0.6347 0.6981 0.7616 0.8251 0.8885 0.9520 1.0155 1.0789 1.1424 1.2059 1.2693 1.3328 1.3963 1.4597 1.5232 1.5867 1.6501 1.7136 1.7771 1.8405 1.9040 1.9675 ... ] (1x100 double)
        y: [0 0.0634 0.1266 0.1893 0.2511 0.3120 0.3717 0.4298 0.4862 0.5406 0.5929 0.6428 0.6901 0.7346 0.7761 0.8146 0.8497 0.8815 0.9096 0.9341 0.9549 0.9718 0.9848 0.9938 0.9989 0.9999 0.9969 0.9898 0.9788 0.9638 0.9450 0.9224 ... ] (1x100 double)

创建一个结构体。

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 0.5712 0.6347 0.6981 0.7616 0.8251 0.8885 0.9520 1.0155 1.0789 1.1424 1.2059 1.2693 1.3328 1.3963 1.4597 1.5232 1.5867 1.6501 1.7136 1.7771 1.8405 1.9040 1.9675 ... ] (1x100 double)
        y: [0 0.0634 0.1266 0.1893 0.2511 0.3120 0.3717 0.4298 0.4862 0.5406 0.5929 0.6428 0.6901 0.7346 0.7761 0.8146 0.8497 0.8815 0.9096 0.9341 0.9549 0.9718 0.9848 0.9938 0.9989 0.9999 0.9969 0.9898 0.9788 0.9638 0.9450 0.9224 ... ] (1x100 double)
    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 0.5712 0.6347 0.6981 0.7616 0.8251 0.8885 0.9520 1.0155 1.0789 1.1424 1.2059 1.2693 1.3328 1.3963 1.4597 1.5232 1.5867 1.6501 1.7136 1.7771 1.8405 1.9040 1.9675 ... ] (1x100 double)
        y: [0 0.0634 0.1266 0.1893 0.2511 0.3120 0.3717 0.4298 0.4862 0.5406 0.5929 0.6428 0.6901 0.7346 0.7761 0.8146 0.8497 0.8815 0.9096 0.9341 0.9549 0.9718 0.9848 0.9938 0.9989 0.9999 0.9969 0.9898 0.9788 0.9638 0.9450 0.9224 ... ] (1x100 double)

创建一个结构体。

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 0.5712 0.6347 0.6981 0.7616 0.8251 0.8885 0.9520 1.0155 1.0789 1.1424 1.2059 1.2693 1.3328 1.3963 1.4597 1.5232 1.5867 1.6501 1.7136 1.7771 1.8405 1.9040 1.9675 ... ] (1x100 double)
        y: [0 0.0634 0.1266 0.1893 0.2511 0.3120 0.3717 0.4298 0.4862 0.5406 0.5929 0.6428 0.6901 0.7346 0.7761 0.8146 0.8497 0.8815 0.9096 0.9341 0.9549 0.9718 0.9848 0.9938 0.9989 0.9999 0.9969 0.9898 0.9788 0.9638 0.9450 0.9224 ... ] (1x100 double)

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 0.5712 0.6347 0.6981 0.7616 0.8251 0.8885 0.9520 1.0155 1.0789 1.1424 1.2059 1.2693 1.3328 1.3963 1.4597 1.5232 1.5867 1.6501 1.7136 1.7771 1.8405 1.9040 1.9675 ... ] (1x100 double)
        y: [1 0.9980 0.9920 0.9819 0.9679 0.9501 0.9284 0.9029 0.8738 0.8413 0.8053 0.7660 0.7237 0.6785 0.6306 0.5801 0.5272 0.4723 0.4154 0.3569 0.2969 0.2358 0.1736 0.1108 0.0476 -0.0159 -0.0792 -0.1423 -0.2048 -0.2665 -0.3271 ... ] (1x100 double)

输入参数

全部折叠

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

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

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

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

输出参数

全部折叠

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

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

提示

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

扩展功能

版本历史记录

在 R2006a 之前推出