zoukankan      html  css  js  c++  java
  • Matlab 结构体之间相同字段的赋值

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

    all_subject = 
    
      包含以下字段的 struct:
    
           Name: ''
             ID: 0
        Chinese: 0
           Math: 0
        English: 0
        Physics: 0
        History: 0
    
    main_subject = 
    
      包含以下字段的 struct:
    
           Name: 'Jake'
             ID: 101
        Chinese: 102
           Math: 150
        English: 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);
            else
                warming('字段"%s"不存在!', cur_key);
            end
        end
    
    end
    

    说明:

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

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

    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');
      
  • 相关阅读:
    KALI LINUX 核心概念讲解,持续更新
    KALI LINUX 工具大全之密码破解 --- BruteSpray ( 暴力喷雾 )
    android studio的 gradle 依赖同步错误解决方法
    安卓逆向的初步研究--从某恋app入手
    nc浏览器的十宗罪
    手机重要文件目录(换新机可能要用到)
    国产手机的谷X服务
    安卓手机设置的那些琐事
    办公中遇见的那些问题
    装系统遇到的那些问题
  • 原文地址:https://www.cnblogs.com/wreng/p/15342998.html
Copyright © 2011-2022 走看看