matlab - 如何区分嵌套元胞数组

标签 matlab

我需要解析一个函数参数 gVars具有以下结构:

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

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

我实现了这段代码:

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}} 就可以了。 .

所以基本上,问题是:如何区分上面的两个元胞数组?有没有人可以帮助我?

最佳答案

您可以在第一项上使用 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

关于matlab - 如何区分嵌套元胞数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36596245/

相关文章:

arrays - 我想要将一组色 block 叠加到图像上并想要控制它们的颜色范围?

matlab - 拉格朗日法

matlab - 在 MATLAB 中使用 find 函数的问题

image - Matlab DICOM 切片

image - 如何避免 Matlab 中的图像显示伪影?

string - Matlab - 如何逐个字母地比较两个字符串?

matlab - 是否可以防止 matlab 定义覆盖函数名称的变量?

arrays - 查找连续的 0 block 的索引

matlab - 如何在 MATLAB 中添加不同长度的向量

matlab - 如何将结构中的变量加载到 Matlab 工作区中?