6

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

tag = {'slot1'}
info = {' name' 'number' 'IDnum'}
x = {tag , info}

我希望能够打电话x(tag(1))并让它显示'slot1'。相反,我收到了这个错误:

??? Error using ==> subsindex
Function 'subsindex' is not defined for values of class 'cell'.

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

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

4

2 回答 2

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'

然后,您可以将函数STRCMP与上述任何一个一起使用:

isTheSame = strcmp(cstr,'slot1');  %# Returns true
isTheSame = strcmp(str,'slot1');   %# Also returns true

上述工作是因为MATLAB 中的字符串元胞数组在许多内置函数中与字符串和字符数组在某种程度上可以互换处理。

于 2010-06-21T16:57:44.613 回答
4

您可以使用结构,而不是使用单元格数组:

x(1) = struct('tag','slot1','info',{{'something'}}); %# using '1' in case there are many

然后,你得到第一个标签

x(1).tag

或者,您可以使用标签名称作为字段名称。如果标签名称和信息是元胞数组,您可以传递元胞数组而不是“slot1”和“此处的信息”,并且您可以一次性创建结构。

x = struct('slot1','information here')
tagName = 'slot1';
%# access the information via tag names
x.(tagName)
于 2010-06-21T17:09:19.260 回答