cell2struct
cell 配列を構造体配列に変換
構文
structArray
= cell2struct(cellArray
, fields
, dim
)
説明
は、cell 配列 structArray
= cell2struct(cellArray
, fields
, dim
)cellArray
内に格納された情報から構造体配列 structArray
を作成します。
引数 fields
は、構造体配列のフィールド名を指定します。この引数は、文字配列、文字ベクトルの cell 配列、または string 配列です。
引数 dim
は、構造体配列の作成に使用する cell 配列の軸がどれであるのかを MATLAB® に伝えます。数値 double
を使用して dim
を指定します。
cell 配列の N
行から派生したフィールドがある構造体配列を作成するには、引数 fields
に N
フィールド名、引数 dim
に数値 1 を指定します。cell 配列の M
列から派生したフィールドがある構造体配列を作成するには、引数 fields
に M
フィールド名、引数 dim
に数値 2 を指定します。
出力 structArray
は、フィールドが N
個ある構造体配列です。ただし、N
は入力引数 fields
のフィールド数と同じ値です。結果として得られる構造体のフィールド数は、変換を希望する次元 dim
でセル数が同じでなければなりません。
例
この節で示す例で使用するために、次のテーブルを作成します。このテーブルには、小さいエンジニアリング会社の従業員についての情報がリストされています。テーブルを行単位で読み取っていくと、従業員名が部署別に表示されます。テーブルを列単位で読み取っていくと、各従業員のその会社での勤続年数が表示されます。
5 年 | 10 年 | 15 年 | |
---|---|---|---|
開発 | Lee, Reed, Hill | Dean, Frye | Lane, Fox, King |
営業 | Howe, Burns | Kirby, Ford | Hall |
経営 | Price | Clark, Shea | Sims |
品質 | Bates, Gray | Nash | Kay, Chase |
ドキュメンテーション | Lloyd, Young | Ryan, Hart, Roy | Marsh |
次のコマンドを入力して、初回の 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 配列は次のとおりです。
cell 配列を次元 1 に沿って struct に変換します。
5 行 3 列の cell 配列をその最初の次元に従って変換して、フィールドが 5 個ある 3 行 1 列の struct 配列を作成します。cell 配列の次元 1 の行はそれぞれ、struct 配列内のフィールドになります。
最初の (つまり垂直の) 次元を横断すると、次のような行見出しがある行が 5 つあります。
rowHeadings = {'development', 'sales', 'management', ... 'quality', 'documentation'};
この次元に関して、cell 配列を struct 配列
depts
に変換します。depts = cell2struct(employees, rowHeadings, 1) depts = 3x1 struct array with fields: development sales management quality documentation
この行方向の構造体を使用して、勤続年数が 10 年以下の開発部のスタッフの名前を見つけます。
depts(1:2).development ans = 'Lee' 'Reed' 'Hill' ans = 'Dean' 'Frye'
同じ cell 配列を次元 2 に沿って struct に変換します。
5 行 3 列の cell 配列をその 2 番目の次元に従って変換して、フィールドが 3 個ある 5 行 1 列の struct 配列を作成します。cell 配列の次元 2 の列はそれぞれ、struct 配列内のフィールドになります。
2 番目 (つまり水平方向) の次元に沿って cell 配列を横断します。列見出しが、結果として得られる構造体のフィールドになります。
colHeadings = {'fiveYears' 'tenYears' 'fifteenYears'}; years = cell2struct(employees, colHeadings, 2) years = 5x1 struct array with fields: fiveYears tenYears fifteenYears
列方向の構造体を使用して、営業部とドキュメンテーション部に所属する従業員のうち、勤続年数が 5 年以上の者の人数を示します。
[~, sales_5years, ~, ~, docu_5years] = years.fiveYears sales_5years = 'Howe' 'Burns' docu_5years = 'Lloyd' 'Young'
cell 配列の一部だけを struct に変換します。
cell 配列の最初と最後の行だけを変換します。これにより、フィールドが 2 個ある 3 行 1 列の struct 配列が得られます。
rowHeadings = {'development', 'documentation'}; depts = cell2struct(employees([1,5],:), rowHeadings, 1) depts = 3x1 struct array with fields: development documentation
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 より前に導入