exponenta event banner

Многоуровневое индексирование для доступа к частям ячеек

В этом примере показаны способы доступа к данным в массивах, хранящихся в ячейках массивов ячеек.

Создайте массив ячеек образца.

myNum = [1, 2, 3];
myCell = {'one', 'two'};
myStruct.Field1 = ones(3);
myStruct.Field2 = 5*ones(5);

C = {myNum, 100*myNum;
     myCell, myStruct}
C=2×2 cell array
    {[ 1 2 3]}    {[100 200 300]}
    {1x2 cell}    {1x1 struct   }

Доступ к полному содержимому конкретной ячейки с помощью фигурных скобок, {}. Например, возвращает числовой вектор из ячейки, которая его содержит.

C{1,2}
ans = 1×3

   100   200   300

Доступ к части содержимого ячейки путем добавления индексов с использованием синтаксиса, соответствующего типу данных содержимого.

Заключите числовые индексы в гладкие круглые скобки. Например, C{1,1} возвращает числовой вектор 1 на 3, [1 2 3]. Откройте второй элемент этого вектора, используя гладкие круглые скобки.

C{1,1}(1,2)
ans = 2

Заключите индексы массива ячеек в фигурные скобки. Например, C{2,1} возвращает массив ячеек, {'one','two'}. Доступ к содержимому второй ячейки в этом массиве ячеек с помощью фигурных скобок.

C{2,1}{1,2}
ans = 
'two'

См. поля массива структуры с точечной нотацией и индексирование в массив, как описано для числовых массивов и массивов ячеек. Например, C{2,2} возвращает массив структуры, где Field2 содержит числовой массив пятерок 5 на 5. Доступ к элементу в пятой строке и первом столбце этого поля осуществляется с помощью точечных обозначений и гладких скобок.

C{2,2}.Field2(5,1)
ans = 5

Можно вложить любое количество массивов ячеек и структур. Например, добавить вложенные ячейки и структуры в C.

C{2,1}{2,2} = {pi, eps};
C{2,2}.Field3 = struct('NestedField1', rand(3), ...
                       'NestedField2', magic(4), ...
                       'NestedField3', {{'text'; 'more text'}} );

Доступ к частям новых данных осуществляется с помощью фигурных скобок, гладких скобок или точечных обозначений.

copy_pi = C{2,1}{2,2}{1,1}
copy_pi = 3.1416
part_magic = C{2,2}.Field3.NestedField2(1:2,1:2)
part_magic = 2×2

    16     2
     5    11

nested_cell = C{2,2}.Field3.NestedField3{2,1}
nested_cell = 
'more text'

Связанные темы