Search code examples
matlabcell-array

search in the second column of a cell array by the value of the first column


I'm working in MATLAB and I have the following cell array:

pippo = 

'FSize'           [       10]
'MSize'           [       10]
'rho'             [      997]
'u2'              [  86.2262]
'n'               [      100]
'nimp'            [        2]
'impeller1dir'    [1x66 char]
'impeller2dir'    [1x66 char]
'comparedir'      [1x57 char]

I would like to return the content of the cell, in the second column, which corresponds to a given value for the cell in the first column of the first row. I.e., if the input is 'nimp', I want to return 2. Is there a simple way to do this which doesn't involve looping, or is looping the only way?


Solution

  • Two methods to do this are containers.Map and logical indexing


    Logical indexing

    firstly we will find the occurance of the input in the first column with strcmp using ind=strcmp(pippo(:,1),'nimp') and then get the contents of the cell in the second column where this is true pippo{ind,2}

    which can be combined into one line with

    out = pippo{strcmp(pippo(:,1),'nimp'),2}
    

    containers.Map

    using containers.Map you can map the keys in the first column to the values in the second column this information is stored as a container, below this is the pippo2 variable

    pippo2=containers.Map(pippo(:,1),pippo(:,2))
    

    and then you can call the container with an argument of the key and get the value as output

    out=pippo2('nimp')
    
    out =
    
         2