Finding number of all nested cells in a complex cell

前端 未结 2 1298
余生分开走
余生分开走 2020-12-20 08:12

I have a nested cell which represents a tree-structure:

CellArray={1,1,1,{1,1,1,{1,1,{1,{1 1 1 1 1 1 1 1}, 1,1},1,1},1,1,1},1,1,1,{1,1,1,1}};
相关标签:
2条回答
  • 2020-12-20 08:39

    Here's a simpler approach using a single while loop and repeated concatenation of the sub-cells:

    temp = CellArray;
    nNodes = 0;
    while iscell(temp)
      index = cellfun(@iscell, temp);
      nNodes = nNodes + sum(index);
      temp = [temp{index}];
    end
    

    And the result for the sample CellArray in the question:

    nNodes =
    
         5
    
    0 讨论(0)
  • 2020-12-20 08:58

    If I understand correctly, you want the number of cell elements, that are themselves cells. Then you can go recursively through your cell cells (and numbers) and check with iscell to see which elements are cells. See the following, where totnod ultimately gives the number of nodes.

    ind=cellfun(@iscell, Chains);
    totnod=sum(ind);
    oldtmp=Chains(ind);
    while ~isempty(oldtmp)
           newtmp={};
           for i=1:length(oldtmp)
               ind=cellfun(@iscell, oldtmp{i});
               newtmp=[newtmp,oldtmp{i}(ind)];
               totnod=totnod+sum(ind);
           end
           oldtmp=newtmp;
    end
    
    0 讨论(0)
提交回复
热议问题