如何区分以下两个对象:
cellArray = {'Var1' 'Var2'};
nestedCellArray = {{'Var1' 'Var2'}};
这一点很重要,因为table(:, cellArray)
有效但table(:, nestedCellArray)
没有。
答案 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