Matlab 结构体之间相同字段的赋值

假设有两个结构体 main_subjectall_subject 。其中 main_subject 中包含了某位同学的主修成绩和学号姓名信息,需要将这些信息地填到包含所有科目信息的另一个结构体 all_subject 对应的字段中(不存在的字段保持默认值),如何比较便利地实现呢?

all_subject = 包含以下字段的 struct:Name: ''ID: 0Chinese: 0Math: 0English: 0Physics: 0History: 0main_subject = 包含以下字段的 struct:Name: 'Jake'ID: 101Chinese: 102Math: 150English: 122

具体的实现如下:

main_subject = struct('Name', 'Jake',...'ID', 101, ...'Chinese', 102,...'Math', 150,...'English', 122)all_subject = struct('Name', '', ...'ID', 0, ...'Chinese', 0, ...'Math', 0, ...'English', 0, ...'Physics', 0, ...'History', 0)cmb = structAssign(all_subject, main_subject)function [structA] = structAssign(structA, structB)
% 将 structB 中与 structA 相同字段的成员的值赋值给 structA 对应的成员keys = fieldnames(structB); % 获得结构体B的所有字段for i = 1:length(keys)cur_key = keys{i};if isfield(structA, cur_key)% 2017年后支持: structName.(dynamicExpression)% dynamicExpression 是一个变量或表达式,返回字符串标量(结构体字段)% 类似于 getfield() 和 setfield() 功能structA.(cur_key) = structB.(cur_key);elsewarming('字段"%s"不存在!', cur_key);endendend

说明:

  1. 不能直接赋值 all_subject = main_subject。直接赋值的结果是 all_subject 完全复制 main_subject,丢失了原来的部分字段。

  2. 关于 Matlab 结构体常用的几个操作函数:

    • struct 创建结构体
    • fieldnames 返回结构体的所有字段名称
    • getfield 返回指定字段的值
    • isfield 确定输入是否为结构体数组字段
    • isstruct 确定输入是否为结构体数组
    • orderfields 对结构体数组的字段进行排序
    • rmfield 删除结构体中的字段
    • setfield 为结构体数组字段赋值
    • arrayfun 将函数应用于每个数组元素
    • structfun 对标量结构体的每个字段应用函数
    • table2struct 将表转换为结构体数组
    • struct2table 将结构体数组转换为表
    • cell2struct 将元胞数组转换为结构体数组
    • struct2cell 将结构体转换为元胞数组
  3. Generate Field Names from Variables Matlab2017版本之后,结构体可以基于变量的字段访问方式,常见的字段访问有

    % 方式1
    main_subject.Chinese = 123;
    chinese = main_subject.Chinese;
    % 方式2
    main_subject.('Chinese') = 123;
    chinese = main_subject.('Chinese');
    % 方式3
    main_subject = setfield(main_subject, 'Chinese', 123);
    chinese = getfield(main_subject, 'Chinese');
    

Matlab 结构体之间相同字段的赋值相关推荐

  1. matlab 结构体 单元数组,matlab结构体、数组和单元数组类型的创建

    matlab结构体.数组和单元数组类型的创建 @ matlab结构体类型 通过字段赋值创建结构体 创建格式: 结构体名称.字段名称 样例: >> student.name='Alan'; ...

  2. 同类型结构体之间赋值不一定有效

    同类型结构体之间赋值不一定有效 今天为这个问题debug好久... 之前看到一个关于结构体使用的技巧, 这个技巧可以避免内存零碎. 保证结构体所属内存尽量不要零散化. struct struct_na ...

  3. Go语言结构体的多字段赋值是并发安全的吗?

    多字段更新? 并发编程中,原子更新多个字段是常见的需求. 举个例子,有一个 struct Person 的结构体,里面有两个字段.我们先更新 Person.name,再更新 Person.age ,这 ...

  4. go面向对象编程:结构体struct详解、结构体实例的创建方式、结构体之间的转换(type取别名的使用)、方法的注意事项及与函数的区别

    入门示例 package main import "fmt" //定义老师结构体,将老师中的各个属性 统一放入结构体中管理: type Teacher struct{//变量名字大 ...

  5. matlab初学matlab——结构体

    matlab中也有结构体,和大多数语言一样: 结构体数组具有下列属性: 数组中的所有结构体都具有相同数目的字段. 所有结构体都具有相同的字段名称. 不同结构体中的同名字段可包含不同类型或大小的数据. ...

  6. matlab 结构体

    在前面,有用到一个cell2struct()函数,cell是单元数组,而struct就是结构体. 1.建立结构体,在matlab中建立结构体有两种方式, eg:第一种为直接赋值 >> st ...

  7. Matlab 结构体数组 基础知识 struct(自学文档)

    struct 结构体数组 全页展开 说明 结构体数组是使用名为字段的数据容器将相关数据组合在一起的数据类型.每个字段都可以包含任意类型的数据.可以使用 structName.fieldName 格式的 ...

  8. matlab 结构体查询,Matlab 结构体

    d直接将用法吧 , 和C 语言差不多,很容易理解 . Student.Name = 'Sam' ; Student.Grade = 6 ; Student.Subject ={'Chinese','M ...

  9. python 结构体数组_python实现结构体数组(初始化并赋值)

    标签: C语言中结构体数组概念及定义 一个结构体变量可以存放一个学生的一组信息,可是如果有 10 个学生呢?难道要定义 10 个结构体变量吗?难道上面的程序要复制和粘贴 10 次吗? 很明显不可能,这 ...

最新文章

  1. Python检查系统可疑用户
  2. 如何使用Java中的UTC或GMT获取当前日期和时间?
  3. Web API 简单示例
  4. ALBERT第一作者亲自讲解:词向量、BERT、ALBERT、XLNet全面解析
  5. SAP 电商云 Spartacus UI 点了 Shipping Method 之后的执行逻辑
  6. c++面向对象高级编程 学习一 不带指针的类
  7. mysql workbench 从model建库_使用MySQL Workbench进行数据库设计——MySQL Workbench用法总结...
  8. 使用re-sign.jar对apk进行重签名
  9. 2B 领域下低代码的探索之路
  10. 控制物体沿椭圆轨迹运动
  11. web网页设计期末课程大作业:基于HTML+CSS+JavaScript个人书画作品展示HTML模板(6页)
  12. 手游后劲不足,“体验”会是端游发展的一张王牌吗?
  13. C++(数据结构与算法):55---无权图与有权图的描述(邻接矩阵、邻接链表、邻接数组、十字链表、邻接多重表)
  14. 【Redis】《Redis 开发与运维》笔记-汇总
  15. linux设置的依赖关系,linux:dpkg:依赖关系问题使得 skype 的配置工作不能继续:问题解决方法...
  16. c语言已知祖父年龄70,实验三循环结构程序设计.doc
  17. 戴尔笔记本怎么拆键盘(收藏)
  18. 还原《魔兽争霸3》场景全过程
  19. 操作系统批处理阶段--单道和多道批处理系统处理优点缺点以及过程,分时实时操作系统
  20. LOJ6436 神仙的游戏

热门文章

  1. IP溯源的原理及方法
  2. 第四章 区块链共识机制
  3. 【比特熊故事汇】6月MVP英雄故事—微软MVP X 英特尔特邀专家,一起消夏
  4. 图解U-Boot:第一阶段源码分析
  5. 计算机竞赛acm试题,ACM竞赛是全球最有影响力的计算机赛事之一,
  6. html中div边框老是置顶,div三条边边框颜色设置
  7. Couldn't find executable named joy_node below /opt/ros/kinetic/share/joy解决方法
  8. mptcp linux 升级,Ubuntu下配置MPTCP
  9. MATLAB编程 利用Hough变换检测圆
  10. 易语言转换html编码,易语言html转实体源码