matlab - 当两个结构具有相同的字段时,如何逐个元素地添加、减去等

标签 matlab class oop struct

我有各种具有字段 W、P、E 的结构,其中包含数值。我想开发一种干净的方法来添加和减去这些结构,而无需每次都在子函数中解包和重新打包(到目前为止,这是我的解决方案)

例如,给定:

S.W = 2
S.P = 3
S.E = 4

M.W = 20
M.P = 30
M.E = 40

我希望能够执行 X = S + M 并以:

X.W = 22
X.P = 33
X.E = 44

我目前尝试通过一个新类来做到这一点,如下所示:

classdef CV
    properties
        W
        P
        E
    end
    methods
        function r = plus(o1,o2)
            r = CV;
            r.E = o1.E + o2.E;
            r.P = o1.P + o2.P;
            r.W = o1.W + o2.W;
        end
    end
end

这允许执行 S + M 并以与输入相同的形式返回一个新变量。我通常不熟悉类(class),想知道这是否是正确的形式。如果是这样,我可能会继续在 methods 部分中为 minustimes 添加函数。但是,这似乎需要大量重复代码,我觉得必须有一个更简单的解决方案。非常感谢任何建议。

最佳答案

以下代码直接作用于结构体,而不是将它们嵌套在类中。假设这两个输入结构具有相同的字段名称(在本例中为 W、P 和 E),但是,它们的顺序可能是任意的(您在评论中提到这对您的应用程序很重要)。

function X = structplus(S, M)
fn = fieldnames(S);
for i = 1 : numel(fn)
  X.(fn{i}) = M.(fn{i}) + S.(fn{i});
end
end

如此定义

S.W = 2
S.P = 3
S.E = 4

M.E = 40
M.P = 30
M.W = 20

(注意M的逆序)和调用

X = structplus(S, M)

产生一个结构,其字段名称的顺序与第一个参数相同:

X = 
  struct with fields:
    W: 22
    P: 33
    E: 44

关于matlab - 当两个结构具有相同的字段时,如何逐个元素地添加、减去等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46818598/

相关文章:

java - 单独的类/方法中的方法实例?

c++ - 尝试编译类实现时对 "winmain"的 undefined reference

javascript - 如何在局部变量中包含 javascript 内容或在本地提供命名空间

使用 defineProperty 的 JavaScript 原型(prototype)继承

matlab - 如何从我的数据中为 surf() 创建一个二维矩阵?

matlab - 正态概率图解释

Matlab 检测棋盘点缺陷

javascript - 如何指定/设置 javascript 对象选项(Ink.UI.Modal 类)

c - 如何在 MATLAB 中加载复杂数据的库?

c++ - 类定义中的条件