如何判断对象是否是嵌套的单元格数组

时间:2015-09-17 00:03:10

标签: matlab

如何区分以下两个对象:

cellArray = {'Var1' 'Var2'};

nestedCellArray = {{'Var1' 'Var2'}};

这一点很重要,因为table(:, cellArray)有效但table(:, nestedCellArray)没有。

1 个答案:

答案 0 :(得分:2)

一种方法是使用cellfun检查外部单元格数组的所有元素是否属于特定类:

cellArray = {'Var1' 'Var2'};
nestedCellArray = {{'Var1' 'Var2'}};

A1 = all(cellfun(@ischar, cellArray))
A2 = all(cellfun(@ischar, nestedCellArray))

或者您可以使用iscell来检查外部单元格数组中的所有元素都不是单元格本身:

A1 = ~any(cellfun(@iscell, cellArray))
A2 = ~any(cellfun(@iscell, nestedCellArray))

如果你对单元格数组的元素有所了解,你也可以连接它并使用iscell来测试结果(在很多情况下这可能是最快的,但它可能会如果单元格数组中的对象不能连接在一起,则无效:

A1 = ~iscell([cellArray{:}])
A2 = ~iscell([nestedCellArray{:}])

最后,您还可以使用cellfun的{​​{3}}选项(在R2015b中可能已弃用)A1 = all(cellfun('isclass', cellArray, 'char')) A2 = all(cellfun('isclass', nestedCellArray, 'char')) ,方法与上述相同:

A1 = ~any(cellfun('isclass', cellArray, 'cell'))
A2 = ~any(cellfun('isclass', nestedCellArray, 'cell'))

cellfun

以上cellfun选项都不适用于外部单元格数组中的大量元素,因为for查看所有元素并且不会'isclass'。在这种情况下,您可以使用function tf = isNotNested(C) tf = true; for i = 1:numel(C) if iscell(C{i}) tf = false; break; end end 循环。这是一个简短的功能:

Profile