2015-05-04 2 views
4

У меня есть сложный массив ячеек, например:Как найти элемент в сложной ячейке?

A = {1 {2; 3};4 {5 6 7;8 9 10}}; 

Как я могу найти элемент в? Например, я хочу проверить, находится ли 9 в A или нет!

+0

Может ли ячейка содержать данные на любом уровне включения или есть только два уровня? – Ratbert

+0

Это может быть на любом уровне, потому что он генерируется случайным образом – mona

+3

, тогда я могу просто предложить рекурсию, чтобы сначала упаковать вашу вложенную ячейку ... – scmg

ответ

1

Если у вас может быть произвольное количество уровней вложенности для ваших массивов ячеек, вам нужно просто перезагрузить их все, чтобы проверить значение. Вот функция, которая будет делать это:

function isPresent = is_in_cell(cellArray, value) 

    f = @(c) ismember(value, c); 
    cellIndex = cellfun(@iscell, cellArray); 
    isPresent = any(cellfun(f, cellArray(~cellIndex))); 

    while ~isPresent 
    cellArray = [cellArray{cellIndex}]; 
    cellIndex = cellfun(@iscell, cellArray); 
    isPresent = any(cellfun(f, cellArray(~cellIndex))); 
    if ~any(cellIndex) 
     break 
    end 
    end 

end 

Эта функция будет проверять записи, которые не Массивы ячеек для значения, а затем извлечь записи, которые являются клеточные массивы, чтобы удалить один гнездовой слой. Это повторяется, пока не будет больше записей, которые являются массивами ячеек, или значение найдено.

+0

Очень красиво сделано! – rayryeng

+0

фантастический !!!!!!! – mona

Смежные вопросы