一起来学matlab-matlab学习笔记12

12_3 结构体

串联结构体,按属性创建含有元胞数组的结构体,filenames,isfield,isstruct,orderfields

觉得有用的话,欢迎一起讨论相互学习~Follow Me

参考文献

https://ww2.mathworks.cn/help/matlab/matlab_prog/concatenate-structures.html

https://ww2.mathworks.cn/help/matlab/ref/struct.html#d117e1320181

https://ww2.mathworks.cn/help/matlab/ref/fieldnames.html

https://ww2.mathworks.cn/help/matlab/ref/isfield.html

https://ww2.mathworks.cn/help/matlab/ref/isstruct.html

https://ww2.mathworks.cn/help/matlab/ref/orderfields.html

串联结构体

  • 要串联结构体,他们必须具有相同的字段集,但这些字段无需包含相同的大小或数据类型。
  • 创建标量 (1×1) 结构体数组 struct1 和 struct2,并且每个数组都具有字段 a 和 b
  1. struct1.a = 'first';
  2. struct1.b = [1,2,3];
  3. struct2.a = 'second';
  4. struct2.b = rand(5);
  5. struct1,struct2
  6. struct1 = struct with fields:
  7. a: 'first'
  8. b: [1 2 3]
  9. struct2 = struct with fields:
  10. a: 'second'
  11. b: [5x5 double]
  • 正如串联两个标量值(如 [1,2])会创建一个 1×2 数值数组一样,串联 struct1 和 struct2 也会创建一个 1×2 结构体数组
  1. combined = [struct1,struct2]
  2. combined = 1x2 struct array with fields:
  3. a
  4. b
  • 当要访问特定字段的内容时,请指定数组中的结构体的索引。例如,访问第一个结构体的字段 a。
  1. combined(1).a
  2. ans =
  3. 'first'
  • 串联也适用于非标量结构体数组。例如,创建一个名为 new 的 2×2 结构体数组。由于 1×2 结构体 combined 和 2×2 结构体 new 都包含两列,因此您可以使用分号分隔符垂直串联它们。
  1. new(1,1).a = 1;
  2. new(1,1).b = 10;
  3. new(1,2).a = 2;
  4. new(1,2).b = 20;
  5. new(2,1).a = 3;
  6. new(2,1).b = 30;
  7. new(2,2).a = 4;
  8. new(2,2).b = 40;
  9. larger = [combined; new]
  10. larger = 3x2 struct array with fields:
  11. a
  12. b
  • 访问结构体 larger(2,1) 的字段 a。它与 new(1,1).a 包含相同的值。
  1. larger(2,1).a
  2. ans = 1

按属性创建含有元胞数组的结构体

  • 可以直接使用"."的方式向一个结构体添加属性,例如a.b即向a结构体中添加属性b
  • 使用构造函数的方式
    • s = struct(field,value)
    • s = struct(field1,value1,...,fieldN,valueN)
  1. 创建包含多个字段的非标量结构体。
  2. field1 = 'f1'; value1 = zeros(1,10);
  3. field2 = 'f2'; value2 = {'a', 'b'};
  4. field3 = 'f3'; value3 = {pi, pi.^2};
  5. field4 = 'f4'; value4 = {'fourth'};
  6. s = struct(field1,value1,field2,value2,field3,value3,field4,value4)
  7. s = 1x2 struct array with fields:
  8. f1
  9. f2
  10. f3
  11. f4
  12. value2 value3 的元胞数组是 1×2 数组,因此 s 也是 1×2 数组。因为 value1 是数值数组而不是元胞数组,所以 s(1).f1 s(2).f1 具有相同的内容。类似地,因为 value4 的元胞数组具有单一元素,所以 s(1).f4 s(2).f4 具有相同的内容。
  13. s(1)
  14. ans = struct with fields:
  15. f1: [0 0 0 0 0 0 0 0 0 0]
  16. f2: 'a'
  17. f3: 3.1416
  18. f4: 'fourth'
  19. s(2)
  20. ans = struct with fields:
  21. f1: [0 0 0 0 0 0 0 0 0 0]
  22. f2: 'b'
  23. f3: 9.8696
  24. f4: 'fourth'

filenames

  • fields = fieldnames(S) 返回结构体数组S的字段名称。
  1. 创建一个结构体数组。
  2. S(1,1).x = linspace(0,2*pi);
  3. S(1,1).y = sin(S(1,1).x);
  4. S(1,1).title = 'y = sin(x)';
  5. S(2,1).x = linspace(0,2*pi);
  6. S(2,1).y = cos(S(2,1).x);
  7. S(2,1).title = 'y = cos(x)'
  8. S = 2x1 struct array with fields:
  9. x
  10. y
  11. title
  • 使用 fieldnames 函数返回元胞数组中的字段名称。
  1. fields = fieldnames(S)
  2. fields = 3x1 cell array
  3. {'x' }
  4. {'y' }
  5. {'title'}
  • 要返回字段的值,请使用 struct2cell 函数。 struct2cell 和 fieldnames 以相同的顺序返回值和字段名称。
  1. values = struct2cell(S)
  2. values = 3x2 cell array
  3. {1x100 double} {1x100 double}
  4. {1x100 double} {1x100 double}
  5. {'y = sin(x)'} {'y = cos(x)'}

isfield

  • 确定输入是否为结构体数组字段
  • TF = isfield(S,field)
  • 如果 field 是结构体数组 S 的一个字段的名称,则 TF = isfield(S,field) 返回 1。否则,将返回 0
  • 如果 field 是包含多个名称的数组,则 TF 是大小相同的逻辑数组。

isstruct

  • 确定输入是否为结构体数组
  • tf = isstruct(A)
  • 如果 A 为 MATLAB的结构体,则 tf = isstruct(A) 返回逻辑值1(true);否则返回逻辑值0(false)。

orderfields

  • 结构体数组的顺序字段

语法

  • S = orderfields(S1)

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

      由于字段名称只能包含字母、数字和下划线,此语法按 ASCII 顺序对字段名称进行排序。所有大写字母排在所有小写字母之前。
  1. 创建一个包含多个字段的结构体。
  2. S1 = struct('b',1,'B',2,'a',3,'A',4)
  3. S1 = struct with fields:
  4. b: 1
  5. B: 2
  6. a: 3
  7. A: 4
  8. 对字段排序。此语法基于 ASCII 顺序按字段名称对字段排序。
  9. S = orderfields(S1)
  10. S = struct with fields:
  11. A: 4
  12. B: 2
  13. a: 3
  14. b: 1
  • S = orderfields(S1,S2)

    • S = orderfields(S1,S2) 返回 S1 的副本,其字段已重新排序以匹配 S2 的字段顺序。输入结构体数组 S1 和 S2 必须具有相同的字段名称。
  1. 创建两个结构体,它们具有相同字段,只是字段顺序不同。字段名称相同,但字段值不同。
  2. S1 = struct('b',1,'B',2,'a',3,'A',4)
  3. S1 = struct with fields:
  4. b: 1
  5. B: 2
  6. a: 3
  7. A: 4
  8. S2 = struct('a',0,'b',20,'B',10,'A',0)
  9. S2 = struct with fields:
  10. a: 0
  11. b: 20
  12. B: 10
  13. A: 0
  14. S1 中的字段进行排序以匹配 S2 中的字段顺序。
  15. S = orderfields(S1,S2)
  16. S = struct with fields:
  17. a: 3
  18. b: 1
  19. B: 2
  20. A: 4
  • S = orderfields(S1,C)

    • S = orderfields(S1,C) 按输入数组 C 匹配名称顺序。S1 中每个字段的名称必须在 C 中出现一次。
  1. 创建一个结构体。
  2. data.x = linspace(0,2*pi);
  3. data.y = sin(data.x);
  4. data.title = 'y = sin(x)'
  5. data = struct with fields:
  6. x: [1x100 double]
  7. y: [1x100 double]
  8. title: 'y = sin(x)'
  9. 通过以元胞数组形式列出字段名称来对字段排序。
  10. C = {'title','x','y'};
  11. data = orderfields(data,C)
  12. data = struct with fields:
  13. title: 'y = sin(x)'
  14. x: [1x100 double]
  15. y: [1x100 double]
  • S = orderfields(S1,P)

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

      如果 S1 有 n 个字段,则 P 的元素是从 1 到 n 的整数,按任意顺序排列。例如,如果 S1 有三个字段,P 是 [3 1 2],则 S1 的第三个字段是输出 S 的第一个字段。当需要以相同的方式对多个结构体数组进行排序时,此语法非常有用。
  1. 创建一个结构体。
  2. data.x = linspace(0,2*pi);
  3. data.y = sin(data.x);
  4. data.title = 'y = sin(x)'
  5. data = struct with fields:
  6. x: [1x100 double]
  7. y: [1x100 double]
  8. title: 'y = sin(x)'
  9. 通过以另一顺序列出字段的原始位置来对字段排序。例如,移动第三个字段,使其成为输出结构体的第一个字段。
  10. P = [3 1 2];
  11. data = orderfields(data,P)
  12. data = struct with fields:
  13. title: 'y = sin(x)'
  14. x: [1x100 double]
  15. y: [1x100 double]

matlab学习笔记12_3串联结构体,按属性创建含有元胞数组的结构体,filenames,isfield,isstruct,orderfields的更多相关文章

  1. matlab学习笔记12_4rmfield,arrayfun,structfun,struct2cell,cell2struct

    一起来学matlab-matlab学习笔记12 12_4 结构体 rmfield,arrayfun,structfun,struct2cell,cell2struct 觉得有用的话,欢迎一起讨论相互学 ...

  2. matlab学习笔记12单元数组和元胞数组 cell,celldisp,iscell,isa,deal,cellfun,num2cell,size

    一起来学matlab-matlab学习笔记12 12_1 单元数组和元胞数组 cell array --cell,celldisp,iscell,isa,deal,cellfun,num2cell,s ...

  3. matlab学习笔记13_3创建函数句柄

    一起来学matlab-matlab学习笔记13函数 13_3 创建函数句柄 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 https://ww2.mathworks.cn/help ...

  4. matlab学习笔记13_2匿名函数

    一起来学matlab-matlab学习笔记13函数 13_2 匿名函数 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 https://ww2.mathworks.cn/help/m ...

  5. MATLAB元胞数组

    MATLAB元胞数组 元胞数组: 元胞数组是MATLAB的一种特殊数据类型,可以将元胞数组看做一种无所不包的通用矩阵,或者叫做广义矩阵.组成元胞数组的元素可以是任何一种数据类型的常数或者常量,每一个元 ...

  6. matlab学习笔记12_2创建结构体数组,访问标量结构体,访问非标量结构体数组的属性,访问嵌套结构体中的数据,访问非标量结构体数组中多个元素的字段

    一起来学matlab-matlab学习笔记12 12_2 结构体 创建结构体数组,访问标量结构体,访问非标量结构体数组的属性,访问嵌套结构体中的数据,访问非标量结构体数组中多个元素的字段 觉得有用的话 ...

  7. matlab学习笔记(一)单元数组

    matlab学习笔记(一)单元数组 1.floor(x) :取最小的整数 floor(3.18)=3,floor(3.98)=3 ceil(x)  :取最大的整数 ceil(3.18)=4,ceil( ...

  8. matlab学习笔记4--MAT文件的保存和读取

    一起来学matlab-matlab学习笔记4 数据导入和导出_1 MAT文件的保存和读取 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 <matlab 程序设计与综合应用&g ...

  9. 【数学建模】MATLAB学习笔记——函数式文件

    MATLAB学习笔记——函数式文件 引入函数式文件 说明: 函数式文件主要用于解决计算中的参数传递和函数调用的问题. 函数式的标志是它的第一行为function语句. 函数式文件可以有返回值,也可以没 ...

随机推荐

  1. 基于gin框架搭建的一个简单的web服务

    刚把go编程基础知识学习完了,学习的时间很短,可能还有的没有完全吸收.不过还是在项目中发现知识,然后在去回顾已学的知识,现在利用gin这个web框架做一个简单的CRUD操作. 1.Go Web框架的技 ...

  2. 使用JS的 FileReader 读取本地文本文件(可兼容各种浏览器)

    最近需要在客户端操作文件,看到网上有 FileReader 对象,链接:https://developer.mozilla.org/zh-CN/docs/Web/API/FileReader 还是直接 ...

  3. mysql-mysqldump

    备份(导出)所有数据库的数据和结构(注意:这种方式备份,还原时,无需先创建数据库,可直接导入) mysqldump -u root -p 'password' --all-databases > ...

  4. python应用-工资计算

    """ 工资计算 Author:罗万财 Date:2017-6-8 """ salary=float(input('请输入工资:')) in ...

  5. Ubuntu 18.04 环境下安装 Matlab2018

    由于实验环境要求,最近在 Ubuntu 18.04 上安装了 Matlab2018b , 这里简单记录过程. (1) 首先是获取对应的 Matlab2018b 的安装包,这里笔者是在一个外国的网站上获 ...

  6. 前端性能----从输入URL开始到返回数据的中间经历过程

    这是一个古老的问题,即我们输入URL后按下回车到网页测呈现都发生了什么? 首先来看一张图: 表示了数据从源端到目的端的封装和拆解过程 预处理URL URL格式:  以http为例: http://ww ...

  7. STL str replace

    #include <iostream> #include <string> using namespace std; void main() { string s=" ...

  8. 函数中,对形参做不加var的全局溢出赋值,可改变形参所指向的实参的本身值

    var formateNumArr = function(arr,defaultVal){     var a = [];     $.each(arr,function(i,v){          ...

  9. python实现用户登录、注册实例

    python面向函数式编程,模拟用户登录验证.注册的代码实现. 主要有以下两个文件: 1.user.txt文档文件,相当于数据库的用户信息表,主要是记录用户名和密码. 注意:1)此文档需要与.py文件 ...

  10. 3.深入学习Servlet的Response和Request

    一.HttpServletResponse web服务器接受到客户端的HTTP请求,对于这个请求分别创建一个代表请求的对象HttpServletRequest和一个代表响应的对象HttpServlet ...