我想在Matlab中编写一个结构来保存一些参数。
struct的名称必须改变循环中的每次迭代,因此在每次迭代中我都会创建一个新的struct。所以我想要这样的东西:
index={'01','02','03'};
letter={'aa','bb','cc'};
names={'Peter','John','Michael'};
for(i=1:numel(index)){
......
strcat(str, index{i}, letter{i})(i).name = names{i};
}
然后,当循环结束时,我有3个具有下一个名字的结构:
- str01aa{
name = 'Peter'
}
- str02bb{
name = 'John'
}
- str03cc{
name = 'Michael'
}
我的问题是括号strcat
的{{1}}函数定义不好,并且没有创建结构。
我希望你能帮助我 感谢。
答案 0 :(得分:1)
strcat(str, index{i}, letter{i})(i).name
不是有效的操作,因为strcat返回一个不能拥有字段的sting对象。您需要使用genvarname
(documentation)将该字符串变为变量名称,如下所示:
index={'01','02','03'};
letter={'aa','bb','cc'};
names={'Peter','John','Michael'};
for(i = 1:numel(index))
{
......
genvarname(strcat('str', index{i}, letter{i}))(i).name = names{i};
}
请注意,为了与您的示例保持一致,我将str
更改为'str'
。作为一般规则,动态构造的变量名称是不好的做法,因为它们使调试成为一场噩梦。
让我提出一个建议;而不是有一堆具有不同的,看似任意的名字的结构,为什么不尝试这样的事情:
index={'01','02','03'};
letter={'aa','bb','cc'};
names={'Peter','John','Michael'};
for(i = 1:numel(index))
{
......
yourStruct(i).id = strcat('str', index{i}, letter{i});
yourStruct(i).name = names{i};
}
无论哪种方式,祝你好运!