Main Content

セルの部分にアクセスするマルチレベルのインデックス付け

この例では、cell 配列のセル内に格納される配列のデータにアクセスするための手法を示します。

cell 配列のサンプルを作成します。

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   }

中かっこ {} を使用して、特定の cell のすべての内容にアクセスします。たとえば、数値ベクトルを、それを含むセルから返します。

C{1,2}
ans = 1×3

   100   200   300

内容のデータ型に一致する構文を使用してインデックスを付加することにより、セルの内容の部分にアクセスします。

数値のインデックスを小かっこで囲みます。たとえば、C{1,1} は、1 行 3 列の数値ベクトル [1 2 3] を返します。小かっこを使用して、そのベクトルの 2 番目の要素にアクセスします。

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

cell 配列インデックスを中かっこで囲みます。たとえば、C{2,1} は cell 配列 {'one','two'} を返します。中かっこを使用して、その cell 配列内の 2 番目のセルの内容にアクセスします。

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

ドット表記法で struct 配列のフィールドを参照し、数値と cell 配列用の記述に従って配列内にインデックスを付けます。たとえば、C{2,2} は構造体配列を返します。ここで、Field2 は 5 文字の 5 行 5 列の数値配列を含んでいます。ドット表記と小かっこを使用して、そのフィールドの 5 行 1 列目の要素にアクセスします。

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

セルと構造体配列の任意の数値を入れ子にすることができます。たとえば、入れ子にされた cell と構造体を 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'

関連するトピック