问题 #1
您将所有偶数设置为 0,但随后您使用 此变异结果 来搜索奇数并将其设置为 0。这可能无法达到您的预期使用原始向量的修改后副本,因此在执行每个操作之前保留该向量的副本是谨慎的做法。
function [result1,result2] = myfunction(v)
vcopy = v; %// Make a copy
vcopy(mod(vcopy,2)==0)= 0; %// Find even numbers and set to 0
result1 = vcopy;
vcopy = v; %// Make another copy
vcopy(mod(vcopy,2)~=0) = 0; %// Find odd numbers and set them to 0.
result2 = vcopy;
return
问题 #2
是的。如果您有存储在f 中的字段名称列表以及存储在c 中的每个字段的对应实体,只需使用如下循环:
function [s] = my_cell2struct(c, f)
for idx = 1 : numel(f)
s.(f{idx}) = c{idx};
end
上面的代码没有错误检查,所以你需要确保c中的元素总数与f的元素总数匹配。此外,c 和 f 必须是元胞数组。请注意,函数中根本没有声明 s。此外,将点运算符与封闭括号和封闭括号内的字符串结合使用,可以让您动态地动态创建字段名称。因此,对于f 中的每个字符串,我们访问存储在c 中的相应值,并创建一个包含该值的字段名称。
这是来自 MathWorks 文档的可重现示例:
c = {'tree',37.4,'birch'};
f = {'category','height','name'};
s = cell2struct(c, f, 2)
s =
category: 'tree'
height: 37.4000
name: 'birch'
请注意,我在这里使用原生 MATLAB 中的 cell2struct 来生成上述结构。执行上述 for 循环,该循环包含在一个名为 my_cell2struct 的函数中,我们得到:
c = {'tree',37.4,'birch'};
f = {'category','height','name'};
s = my_cell2struct(c, f)
s =
category: 'tree'
height: 37.4000
name: 'birch'