Main Content

cell2struct

cell 配列を構造体配列に変換

構文

structArray = cell2struct(cellArray, fields, dim)

説明

structArray = cell2struct(cellArray, fields, dim) は、cell 配列 cellArray 内に格納された情報から構造体配列 structArray を作成します。

引数 fields は、構造体配列のフィールド名を指定します。この引数は、文字配列、文字ベクトルの cell 配列、または string 配列です。

引数 dim は、構造体配列の作成に使用する cell 配列の軸がどれであるのかを MATLAB® に伝えます。数値 double を使用して dim を指定します。

cell 配列の N 行から派生したフィールドがある構造体配列を作成するには、引数 fieldsN フィールド名、引数 dim に数値 1 を指定します。cell 配列の M 列から派生したフィールドがある構造体配列を作成するには、引数 fieldsM フィールド名、引数 dim に数値 2 を指定します。

出力 structArray は、フィールドが N 個ある構造体配列です。ただし、N は入力引数 fields のフィールド数と同じ値です。結果として得られる構造体のフィールド数は、変換を希望する次元 dim でセル数が同じでなければなりません。

この節で示す例で使用するために、次のテーブルを作成します。このテーブルには、小さいエンジニアリング会社の従業員についての情報がリストされています。テーブルを行単位で読み取っていくと、従業員名が部署別に表示されます。テーブルを列単位で読み取っていくと、各従業員のその会社での勤続年数が表示されます。

 5 年10 年15 年
開発Lee, Reed, HillDean, FryeLane, Fox, King
営業Howe, BurnsKirby, FordHall
経営PriceClark, SheaSims
品質Bates, Gray NashKay, Chase
ドキュメンテーションLloyd, YoungRyan, Hart, RoyMarsh

次のコマンドを入力して、初回の cell 配列 employees を作成します。

devel = {{'Lee','Reed','Hill'}, {'Dean','Frye'}, ...
   {'Lane','Fox','King'}};
sales = {{'Howe','Burns'}, {'Kirby','Ford'}, {'Hall'}};
mgmt = {{'Price'}, {'Clark','Shea'}, {'Sims'}};
qual = {{'Bates','Gray'}, {'Nash'}, {'Kay','Chase'}};
docu = {{'Lloyd','Young'}, {'Ryan','Hart','Roy'}, {'Marsh'}};

employees = [devel; sales; mgmt; qual; docu]
employees = 

    {1x3 cell}    {1x2 cell}    {1x3 cell}
    {1x2 cell}    {1x2 cell}    {1x1 cell}
    {1x1 cell}    {1x2 cell}    {1x1 cell}
    {1x2 cell}    {1x1 cell}    {1x2 cell}
    {1x2 cell}    {1x3 cell}    {1x1 cell}

結果として得られる cell 配列は次のとおりです。

5 by 3 cell array of employees

cell 配列を次元 1 に沿って struct に変換します。

  1. 5 行 3 列の cell 配列をその最初の次元に従って変換して、フィールドが 5 個ある 3 行 1 列の struct 配列を作成します。cell 配列の次元 1 の行はそれぞれ、struct 配列内のフィールドになります。

    5 by 3 cell array converted to 3 by 1 struct array

    最初の (つまり垂直の) 次元を横断すると、次のような行見出しがある行が 5 つあります。

    rowHeadings = {'development', 'sales', 'management', ...
       'quality', 'documentation'};
    
  2. この次元に関して、cell 配列を struct 配列 depts に変換します。

    depts = cell2struct(employees, rowHeadings, 1)
    depts = 
    3x1 struct array with fields:
        development
        sales
        management
        quality
        documentation
    
  3. この行方向の構造体を使用して、勤続年数が 10 年以下の開発部のスタッフの名前を見つけます。

    depts(1:2).development
    ans = 
        'Lee'    'Reed'    'Hill'
    ans = 
        'Dean'    'Frye'

同じ cell 配列を次元 2 に沿って struct に変換します。

  1. 5 行 3 列の cell 配列をその 2 番目の次元に従って変換して、フィールドが 3 個ある 5 行 1 列の struct 配列を作成します。cell 配列の次元 2 の列はそれぞれ、struct 配列内のフィールドになります。

    5 by 3 cell array converted to 5 by 1 struct array

  2. 2 番目 (つまり水平方向) の次元に沿って cell 配列を横断します。列見出しが、結果として得られる構造体のフィールドになります。

    colHeadings = {'fiveYears' 'tenYears' 'fifteenYears'};
    
    years = cell2struct(employees, colHeadings, 2)
    years = 
    5x1 struct array with fields:
        fiveYears
        tenYears
        fifteenYears
    
  3. 列方向の構造体を使用して、営業部とドキュメンテーション部に所属する従業員のうち、勤続年数が 5 年以上の者の人数を示します。

    [~, sales_5years, ~, ~, docu_5years] = years.fiveYears
    sales_5years = 
        'Howe'    'Burns'
    docu_5years = 
        'Lloyd'    'Young'
    

cell 配列の一部だけを struct に変換します。

  1. cell 配列の最初と最後の行だけを変換します。これにより、フィールドが 2 個ある 3 行 1 列の struct 配列が得られます。

    rowHeadings = {'development', 'documentation'};
    
    depts = cell2struct(employees([1,5],:), rowHeadings, 1)
    depts = 
    3x1 struct array with fields:
        development
        documentation

    5 by 3 cell array converted to 3 by 1 struct array

  2. 3 種類の期間すべてに関して、これらの部署に所属する従業員を表示します。

    for k=1:3
       depts(k,:)
    end
    
    ans = 
          development: {'Lee'  'Reed'  'Hill'}
        documentation: {'Lloyd'  'Young'}
    ans = 
          development: {'Dean'  'Frye'}
        documentation: {'Ryan'  'Hart'  'Roy'}
    ans = 
          development: {'Lane'  'Fox'  'King'}
        documentation: {'Marsh'}

拡張機能

バージョン履歴

R2006a より前に導入