在循环中使用 MatLab 'Union' 函数

Using MatLab 'Union' function in a loop

考虑到 MatLab 结构,我对字段名进行了如下循环:

scenario = fieldnames(myStruct)
for scenarioidx = 1:length(scenario)
    scenarioname = scenario{scenarioidx};
    category = fieldnames(myStruct.(scenarioname))
    for categoryidx = 1:length(category)
        categoryname = category{categoryidx};
        entity = fieldnames(myStruct.(scenarioname).(categoryname))
    end
end

此循环 returns 每个类别的实体。现在,我想将所有这些实体组合在一个向量中。我尝试使用 'union' 函数如下:

scenario = fieldnames(myStruct)
for scenarioidx = 1:length(scenario)
    scenarioname = scenario{scenarioidx};
    category = fieldnames(myStruct.(scenarioname))
    for categoryidx = 1:length(category)
        categoryname = category{categoryidx};
        allEntity = {}
        entity = fieldnames(myStruct.(scenarioname).(categoryname))
        combo_entity = union (allEntity, entity)
    end
end

不幸的是,这只是返回与以前相同的结果,并没有合并任何东西。 有没有人知道如何在这样的循环中实现联合函数?

简单地说:

struct_entities = structfun(@struct2cell, myStruct, 'UniformOutput', false);
  cell_entities = struct2cell(struct_entities);
   all_entities = unique(vertcat(cell_entities{:}));

想法是:

  • 检索实体并放弃类别名称;
  • 也放弃场景名称,因为不需要它们;
  • assemble 单个元胞数组中的累积实体。

如果需要使用union,那么代码可以改写为:

all_entities = {};

scenarios = fieldnames(myStruct);
for si = 1:numel(scenarios)
        categories = fieldnames(myStruct.(scenarios{si}));
        for ci = 1:numel(categories)
                entities = fieldnames(myStruct.(scenarios{si}).(categories{ci}));
                all_entities = union(all_entities, entities);
        end;
end;