我有各种具有字段 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
部分中为 minus
和 times
添加函数。但是,这似乎需要大量重复代码,我觉得必须有一个更简单的解决方案。非常感谢任何建议。
最佳答案
以下代码直接作用于结构体,而不是将它们嵌套在类中。假设这两个输入结构具有相同的字段名称(在本例中为 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/