Как я могу получить доступ к массивам вложенных ячеек в MATLAB? - PullRequest
6 голосов
/ 21 июня 2010

Я хотел бы создать вложенный массив ячеек следующим образом:

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 класс не работает, но есть ли простой способ решить эту проблему?

Ответы [ 2 ]

12 голосов
/ 21 июня 2010

Возвращаемое значение 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 обрабатываются несколько взаимозаменяемо со строками и массивами символов во многих встроенных функциях.

4 голосов
/ 21 июня 2010

Вместо использования массива ячеек вы можете использовать структуру:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...