如何在MATLAB中访问嵌套单元数组?

Ben*_*sen 6 matlab nested cell-array

我想制作一个嵌套的单元格数组,如下所示:

tag = {'slot1'}
info = {' name' 'number' 'IDnum'}
x = {tag , info}
Run Code Online (Sandbox Code Playgroud)

我希望能够打电话x(tag(1))并让它显示出来'slot1'.相反,我收到此错误:

??? Error using ==> subsindex
Function 'subsindex' is not defined for values of class 'cell'.
Run Code Online (Sandbox Code Playgroud)

如果我调用x(1)MATLAB显示{1x1 cell}.我希望能够访问列表中的第一个单元格,x以便我可以与另一个字符串进行字符串比较.

我知道如果MATLAB的内置类不起作用但是有一个解决这个问题的简单技巧,我可以编写自己的类来做这个吗?

gno*_*ice 12

返回值x(1)实际上是一个1乘1的单元格数组,其中包含另一个 1乘1的单元格数组,该数组本身包含该字符串'slot1'.要访问单元格数组的内容(而不仅仅是单元格的数组),您必须使用花括号(即"内容索引")而不是括号(即"单元索引").

例如,如果'slot1'要从x中检索字符串以进行字符串比较,可以使用以下两种方法之一来完成:

cstr = x{1};    %# Will return a 1-by-1 cell array containing 'slot1'
str = x{1}{1};  %# Will return the string 'slot1'
Run Code Online (Sandbox Code Playgroud)

然后你可以使用STRCMP功能与上述任何一个:

isTheSame = strcmp(cstr,'slot1');  %# Returns true
isTheSame = strcmp(str,'slot1');   %# Also returns true
Run Code Online (Sandbox Code Playgroud)

上述工作,因为字符串单元阵列在MATLAB与许多内置函数的字符串和字符数组某种程度上可以互换处理.