如何为多个变量添加通用后缀?

时间:2018-08-03 02:32:33

标签: matlab

我在工作区中有一个变量列表。例如;

C_CA1xDG_1
C_GPxDG_5
C_CA1xDG_B
C_CA1xDG_iB
C_DGxDG_PS
C_CPxDG_CS
C_CA1xDG_1

我将在这些变量名称的末尾添加一个公共后缀(_A12),这样结果将是;

C_CA1xDG_1_A12
C_CA1xDG_5_A12
C_CA1xDG_B_A12
C_CA1xDG_iB_A12
C_DGxDG_PS_A12
C_CPxDG_CS_A12
C_CA1xDG_1_A12

如果有人能帮助我,我会很高兴。

1 个答案:

答案 0 :(得分:1)

动态/以编程方式分配变量名确实是一个坏习惯。更好的方法是将变量存储在单元格数组中,或者,如果要保留一些命名,则将结构存储在结构中。

假设您在结构中拥有所有这些变量

myStruct = struct();
myStruct.C_CA1xDG_1 = [1 2 3];
myStruct.C_GPxDG_5  = [4 5 6];
% ...
myStruct.C_CPxDG_CS = 'CPxDG_CS!!';

现在,您可以轻松地做很多事情。

  • 不是在字段名上加上后缀,为什么不直接嵌套结构?

    myNestedStruct = struct();
    myNestedStruct.A12 = myStruct;
    

    您可以整洁地访问myNestedStruct.A12.C_CA1xDG_1之类的内容。

    如果您添加后缀的动机是与其他后缀具有相似的名称,这将非常有用-现在在包含的结构中仅包含更多字段!

  • 如果您确实想重命名字段,也可以这样做。这有点混乱,但是却不如动态工作空间变量名称那么糟糕,因为它们易于操作,包含和检查...的存在。

    f = fieldnames( myStruct );
    for ii = 1:numel(f)
        myStruct.( [f{ii}, '_A12'] ) = myStruct.( f{ii} );
        rmfield( myStruct, f{ii} );
    end
    

    请注意,这里我使用的语法是使用字符串为结构字段建立索引,这要求字符串必须用方括号括起来。