MATLAB中orderfields函数用法

打印 上一主题 下一主题

主题 948|帖子 948|积分 2844

目录
语法
说明
示例
按名称对字段排序
使用另一个结构体对字段排序
在元胞数组中列出字段名称
使用置换向量按位置列出字段
使用来自另一个结构体的置换向量重新排序

        orderfields函数的功能是结构体数组的顺序字段。
语法

  1. S = orderfields(S1)
  2. S = orderfields(S1,S2)
  3. S = orderfields(S1,C)
  4. S = orderfields(S1,P)
  5. [S,Pout] = orderfields(___)
复制代码
说明

S = orderfields(S1) 按名称对 S1 中的字段排序。
        由于字段名称只能包含字母、数字和下划线,此语法按 ASCII 顺序对字段名称进行排序。全部大写字母排在全部小写字母之前。
S = orderfields(S1,S2) 返回 S1 的副本,其字段已重新排序以匹配 S2 的字段顺序。输入结构体数组 S1 和 S2 必须具有雷同的字段名称。
S = orderfields(S1,C) 按输入数组 C 匹配名称顺序。S1 中每个字段的名称必须在 C 中出现一次。
S = orderfields(S1,P) 按置换向量 P 匹配顺序。
        如果 S1 有 n 个字段,则 P 的元素是从 1 到 n 的整数,按恣意顺序排列。例如,如果 S1 有三个字段,P 是 [3 1 2],则 S1 的第三个字段是输出 S 的第一个字段。当需要以雷同的方式对多个结构体数组进行排序时,此语法非常有用。
[S,Pout] = orderfields(___) 还返回一个置换向量。Pout 的元素是从 1 到 n 的整数,其排列顺序反映了字段顺序的变革。可将此语法与上述语法中的任何输入参数一起使用。
示例

按名称对字段排序

        创建一个包含多个字段的结构体。
  1. S1 = struct('b',1,'B',2,'a',3,'A',4)
  2. S1 = struct with fields:
  3.     b: 1
  4.     B: 2
  5.     a: 3
  6.     A: 4
复制代码
        对字段排序。此语法基于 ASCII 顺序按字段名称对字段排序。
  1. S = orderfields(S1)
  2. S = struct with fields:
  3.     A: 4
  4.     B: 2
  5.     a: 3
  6.     b: 1
复制代码
使用另一个结构体对字段排序

        创建两个结构体,它们具有雷同字段,只是字段顺序不同。字段名称雷同,但字段值不同。
  1. S1 = struct('b',1,'B',2,'a',3,'A',4)
  2. S1 = struct with fields:
  3.     b: 1
  4.     B: 2
  5.     a: 3
  6.     A: 4
  7. S2 = struct('a',0,'b',20,'B',10,'A',0)S2 = struct with fields:    a: 0    b: 20    B: 10    A: 0
复制代码
        对 S1 中的字段进行排序以匹配 S2 中的字段顺序。
  1. S = orderfields(S1,S2)
  2. S = struct with fields:
  3.     a: 3
  4.     b: 1
  5.     B: 2
  6.     A: 4
复制代码
在元胞数组中列出字段名称

        创建一个结构体。
  1. data.x = linspace(0,2*pi);
  2. data.y = sin(data.x);
  3. data.title = 'y = sin(x)'
  4. data = struct with fields:
  5.         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)
  6.         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)
  7.     title: 'y = sin(x)'
复制代码
        通过以元胞数组形式列出字段名称来对字段排序。
  1. C = {'title','x','y'};
  2. data = orderfields(data,C)
  3. data = struct with fields:
  4.     title: 'y = sin(x)'
  5.         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)
  6.         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)
复制代码
使用置换向量按位置列出字段

        创建一个结构体。
  1. data.x = linspace(0,2*pi);
  2. data.y = sin(data.x);
  3. data.title = 'y = sin(x)'
  4. data = struct with fields:
  5.         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)
  6.         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)
  7.     title: 'y = sin(x)'
复制代码
        通过以另一顺序列出字段的原始位置来对字段排序。例如,移动第三个字段,使其成为输出结构体的第一个字段。
  1. P = [3 1 2];
  2. data = orderfields(data,P)
  3. data = struct with fields:
  4.     title: 'y = sin(x)'
  5.         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)
  6.         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)
复制代码
使用来自另一个结构体的置换向量重新排序

        创建一个结构体。
  1. data1.x = linspace(0,2*pi);
  2. data1.y = sin(data1.x);
  3. data1.title = 'y = sin(x)';
复制代码
        使用 orderfields 函数对该结构体重新排序。将新字段顺序存储在置换向量 Pout 中。
  1. [S,Pout] = orderfields(data1,{'title','x','y'})
  2. S = struct with fields:
  3.     title: 'y = sin(x)'
  4.         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)
  5.         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)
  6. Pout = 3×1
  7.      3
  8.      1
  9.      2
复制代码
        创建另一个具有雷同字段的结构体。
  1. data2.x = data1.x;
  2. data2.y = cos(data2.x);
  3. data2.title = 'y = cos(x)';
复制代码
        使用 Pout 对 data2 的字段重新排序。如果有许多具有雷同字段名称的结构体,则可以使用 Pout 以雷同的方式对全部这些结构体的字段重新排序。
  1. S2 = orderfields(data2,Pout)
  2. S2 = struct with fields:
  3.     title: 'y = cos(x)'
  4.         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)
  5.         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)
复制代码
参数说明
   S1 — 输入结构体
          输入结构体,指定为结构体数组。
   S2 — 以结构体给出的字段顺序
          以结构体给出的字段顺序,指定为结构体数组。S2 与 S1 具有雷同的字段,但以不同顺序指定。
   C — 以名称给出的字段顺序
          以名称给出的字段顺序,指定为字符向量元胞数组或字符串数组。C 中的名称必须与 S1 的字段名称匹配。
   P — 以编号给出的字段顺序
          以编号排列的字段顺序,指定为数值向量。编号必须为从 1 到 n 的整数,其中 n 是 S1 的字段数。
   S — 重新排序后的结构体
          重新排序后的结构体,以结构体数组形式返回。S 与 S1 具有雷同的字段,但字段顺序可能不同。
   Pout — 输出字段顺序
          输出字段顺序,以数值向量形式返回。Pout 的元素是从 1 到 n 的整数,其中 n 是 S1 的字段数。整数的置换表示字段顺序的变革。
提示


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


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

耶耶耶耶耶

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表