灵活的结构名称,无需切换

时间:2019-04-12 13:46:37

标签: matlab switch-statement matlab-struct

对于我的代码,我需要一个可变的结构。根据计数器的结构,应添加其他字段。所有字段均应灵活,并且可以具有不同的值。当前,我使用switch条件。为了透明起见,我想更改此设置。举个例子,我下面的代码可以为(spl{1,i}{1})取不同的值(例如Input / Output,...)。后一个数字(1)一直计数到达到structlength为止。因此,如果structlength等于2,则代码应如下所示:testData.(spl{1,i}{1}).(spl{1,i}{2})

总结:是否可以消除开关条件?

switch structLength

    case 1
        testData.(spl{1,i}{1}) = emptyMat;
    case 2
        testData.(spl{1,i}{1}).(spl{1,i}{2}) = emptyMat;
    case 3
        testData.(spl{1,i}{1}).(spl{1,i}{2}).(spl{1,i}{3}) = emptyMat;
    case 4
        testData.(spl{1,i}{1}).(spl{1,i}{2}).(spl{1,i}{3})...
            .(spl{1,i}{4}) = emptyMat;
    case 5
        testData.(spl{1,i}{1}).(spl{1,i}{2}).(spl{1,i}{3})...
            .(spl{1,i}{4}).(spl{1,i}{5}) = emptyMat;
    case 6
        testData.(spl{1,i}{1}).(spl{1,i}{2}).(spl{1,i}{3})...
            .(spl{1,i}{4}).(spl{1,i}{5}).(spl{1,i}{6}) = emptyMat;

1 个答案:

答案 0 :(得分:1)

可以将switch替换为for循环(无eval),如下所示。但是我建议您选择一个更简单的数据结构,这将使您的生活更轻松。

% Example data
emptyMat = [10 22];
structLength = 3;
spl = {{'a', 'bb', 'ccc'}};
ii = 1;

% Create the nested struct
testData = emptyMat; % Result so far. Will be wrapped into fields from inner to outer
for k = structLength:-1:1
    testData = struct(spl{1,ii}{k}, testData); % wrap into an outer field
end

检查:

>> testData
testData = 
  struct with fields:

    a: [1×1 struct]

>> testData.a
ans = 
  struct with fields:

    bb: [1×1 struct]

>> testData.a.bb
ans = 
  struct with fields:

    ccc: [10 22]

>> testData.a.bb.ccc
ans =
    10    22