search the second column of a cell array according to the values in the first column

2 views (last 30 days)
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?

Accepted Answer

Andrei Bobrov
Andrei Bobrov on 7 May 2014
out = pippo{ismember(pippo(:,1),'nimp'),2};
  2 Comments
Sergio Rossi
Sergio Rossi on 7 May 2014
Edited: Sergio Rossi on 7 May 2014
Great! I was given this solution, too:
out = pippo{strcmp(pippo(:,1),'nimp'),2};
which does the same ( ismember is more generic, though, and works regardless of the types of elements in the first column of parameters ). However, my favourite is:
pippo=containers.Map(pippo(:,1),pippo(:,2))
You can then retrieve any value simply by accessing the container with the corresponding key:
out=pippo2('nimp');
Didn't know MATLAB had containers! Looks like a great solution. What do you think?

Sign in to comment.

More Answers (1)

Roberto
Roberto on 7 May 2014
I'd recommend the use of structures:
pippo.FSize= 10;
pippo.MSize= 10;
pippo.rho= 997;
pippo.u2= 86.2262;
So when you want a member, just type:
>> pippo.FSize
ans =
10
but if it cannot be done, try to use a code like this:
pippo = {'test',4;'Some',5} ;
searched = 'some';
returned = [];
for i = 1: numel(pippo)/2
if strcmpi(pippo{i,1},searched)
returned = pippo{i,2};
end
end
disp(returned);

Categories

Find more on Matrices and Arrays in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!