• 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');
      
  • 相关阅读:
    【工具】模板引擎 Velocity
    【Android】Android 彩信发送的两种方式+源代码
    【Win7】 建立无线局域网实现共享上网
    【Android】java.net.SocketException: Permission denied解决
    Android中使用Post请求(网友版)
    Android通过post请求发送一个xml,解析返回xml数据
    学用MVC4做网站六后台管理:6.1管理员
    学用MVC4做网站六:后台管理
    html5的新增的标签和废除的标签
    HTML5新增的属性和废除的属性
  • 原文地址:https://www.cnblogs.com/wreng/p/15342998.html
Copyright © 2020-2023  润新知