Вы должны использовать ()
вместо {}
для индексации ячеек:
function left = remove(cells, item)
left = cells(cellfun(@(i) ~isequal(item, i), cells));
Использование ()
для индексации даст вам подмножество ячеек, тогда как {}
вернет содержимое подмножества ячеек в виде списка, разделенного запятыми , и только первая запись этого списка будет помещена в left
в вашем примере.
Вы можете проверить эту документацию MATLAB для получения дополнительной информации об использовании массивов ячеек.
РЕДАКТИРОВАТЬ: Ответ на комментарий ...
Если у вас есть операция , которая в итоге дает вам список через запятую, вы можете поместить отдельные элементы списка в ячейки массива ячеек, окружив операцию фигурными скобками.Для вашего примера вы могли бы сделать:
left = {cells{cellfun(@(i) ~isequal(item, i), cells)}};
Внутренний набор фигурных скобок создает разделенный запятыми список содержимого cells
, который не равен item
, и внешний набор затемсобирает этот список в массив ячеек.Это, конечно, даст тот же результат, что и использование круглых скобок для индексации, что является более разумным подходом в этом случае.
Если у вас есть функция , которая возвращает несколько выходных аргументови вы хотите собрать эти несколько значений в массив ячеек, тогда это немного сложнее.Сначала вы должны решить, сколько выходных аргументов вы получите, или вы можете использовать функцию NARGOUT , чтобы получить все возможные выходные данные:
nOut = 3; %# Get the first three output arguments
%# Or...
nOut = nargout(@some_fcn); %# Get all the output arguments from some_fcn
Затем вы можете собрать выходные данные в 1-by- nOut
массив ячеек outArgs
, выполнив следующие действия:
[outArgs{1:nOut}] = some_fcn(...);
Следует отметить, что NARGOUT вернет отрицательное значение, если функция имеет переменное число выходных аргументов , поэтому в таком случае вам придется самостоятельно выбирать значение для nOut
.