cell2struct

Convert cell array to structure array

Syntax

structArray = cell2struct(cellArray, fields, dim)

Description

structArray = cell2struct(cellArray, fields, dim) creates a structure array, structArray, from the information contained within cell array cellArray.

The fields argument specifies field names for the structure array. This argument is an array of strings or a cell array of strings.

The dim argument tells MATLAB® which axis of the cell array to use in creating the structure array. Use a numeric double to specify dim.

To create a structure array with fields derived from N rows of a cell array, specify N field names in the fields argument, and the number 1 in the dim argument. To create a structure array with fields derived from M columns of a cell array, specify M field names in the fields argument and the number 2 in the dim argument.

The structArray output is a structure array with N fields, where N is equal to the number of fields in the fields input argument. The number of fields in the resulting structure must equal the number of cells along dimension dim that you want to convert.

Examples

Create the following table for use with the examples in this section. The table lists information about the employees of a small Engineering company. Reading the table by rows shows the names of employees by department. Reading the table by columns shows the number of years each employee has worked at the company.

 5 Years10 Years15 Years
DevelopmentLee, Reed, HillDean, FryeLane, Fox, King
SalesHowe, BurnsKirby, FordHall
ManagementPriceClark, SheaSims
QualityBates, Gray NashKay, Chase
DocumentationLloyd, YoungRyan, Hart, RoyMarsh

Enter the following commands to create the initial cell array 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}

This is the resulting cell array:

Convert the cell array to a struct along dimension 1:

  1. Convert the 5-by-3 cell array along its first dimension to construct a 3-by-1 struct array with 5 fields. Each of the rows along dimension 1 of the cell array becomes a field in the struct array:

    Traversing the first (i.e., vertical) dimension, there are 5 rows with row headings that read as follows:

    rowHeadings = {'development', 'sales', 'management', ...
       'quality', 'documentation'};
    
  2. Convert the cell array to a struct array, depts, in reference to this dimension:

    depts = cell2struct(employees, rowHeadings, 1)
    depts = 
    3x1 struct array with fields:
        development
        sales
        management
        quality
        documentation
    
  3. Use this row-oriented structure to find the names of the Development staff who have been with the company for up to 10 years:

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

Convert the same cell array to a struct along dimension 2:

  1. Convert the 5-by-3 cell array along its second dimension to construct a 5-by-1 struct array with 3 fields. Each of the columns along dimension 2 of the cell array becomes a field in the struct array:

  2. Traverse the cell array along the second (or horizontal) dimension. The column headings become fields of the resulting structure:

    colHeadings = {'fiveYears' 'tenYears' 'fifteenYears'};
    
    years = cell2struct(employees, colHeadings, 2)
    years = 
    5x1 struct array with fields:
        fiveYears
        tenYears
        fifteenYears
    
  3. Using the column-oriented structure, show how many employees from the Sales and Documentation departments have worked for the company for at least 5 years:

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

Convert only part of the cell array to a struct:

  1. Convert only the first and last rows of the cell array. This results in a 3-by-1 struct array with 2 fields:

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

  2. Display those employees who belong to these departments for all three periods of time:

    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'}
Was this topic helpful?