在Matlab中连接结构名称的字符

时间:2014-06-11 10:23:02

标签: matlab struct string-concatenation

我想在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}}函数定义不好,并且没有创建结构。

我希望你能帮助我 感谢。

1 个答案:

答案 0 :(得分:1)

strcat(str, index{i}, letter{i})(i).name不是有效的操作,因为strcat返回一个不能拥有字段的sting对象。您需要使用genvarnamedocumentation)将该字符串变为变量名称,如下所示:

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};

}

无论哪种方式,祝你好运!