如何区分嵌套的单元格数组

时间:2016-04-13 10:56:19

标签: matlab

我需要使用以下结构解析函数参数gVars

{ {'var1', 1}, { {'var2', 2}, {'var3', 3} } }

基本上它总是有两个元素。每个元素可以是像{'var', value}这样的单元格数组,也可以是包含嵌套单元格数组的数组,如上例中的{{-} [, {-}]+}。我不想强迫用户将第一种类型的值({'var', val})括在双括号中,如{{'var', val}}(如果只有一个变量,那么用户可以自由使用1-级别单元格数组。)

我实现了这段代码:

for ii=1:length(gVars)
    disp 'Current group'
    curGroup = gVars{1, ii}
    for jj=1:length(curGroup)
        disp 'Current group content'
        content = curGroup{1, jj}
        allColumns = {allColumns{:}, content{1}};
    end
end

错误是:

Current group
curGroup = 
    'var'    []

Current group content
content =
var

Cell contents reference from a non-cell array object.

基本上我无法区分长度为2的这两种类型的单元格数组:

{'v1', val1}
{ {'v2', val1}, {'v3', val3} }

这两个都是长度为2的单元格数组。对于{'v1', val1},当我尝试使用content{1}访问变量名时它会失败,因为它已经选择了字符串'v1'。代码显然适用于第二个参数,如果我将第一个类型的值强制为{{'v1', val1}},那就没问题了。

基本上,问题是:如何区分上面的两个单元阵列?有没有人可以帮助我?

1 个答案:

答案 0 :(得分:3)

您可以在第一项上使用iscell

home
val1 = 1; val2 = 2; val3 = 3;
test{1} = {'v1', val1};
test{2} = { {'v2', val1}, {'v3', val3} };

for ii=1:length(test)
  if iscell ( test{ii}{1} )
    fprintf ( 'do this for %s\n', test{ii}{1}{1} )
  else
    fprintf ( 'do this for %s\n', test{ii}{1} )
  end
end