MATLAB Answers


I would like to get an cell array output by matching 2 cell arrays and returning with corresponding matched values from other cell array.

Asked by velmurugan on 13 Jul 2018 at 22:07
Latest activity Commented on by velmurugan on 16 Jul 2018 at 3:45

I have 2 cell arrays A(6*1) and B(35*2).

A= {'MEG0522';'MEG0523';'MEG0512';'MEG0513';'MEG0312';'MEG0313'};
B= {'MEG0522','LF';'MEG0523','LF';'MEG0512','LF';'MEG0513','LF';'MEG0312','LF';'MEG0313','LF';'MEG0342','LF';'MEG0343','LF';'MEG0122','LF';'MEG0123','LF';'MEG0822','LF';'MEG0823','LF';'MEG0533','LF';'MEG0532','LF';'MEG0543','LF';'MEG0542','LF'{'MEG0923','RF';'MEG1212','RF';'MEG1213','RF';'MEG1223','RF';'MEG1222','RF';'MEG1412','RF';'MEG1413','RF';'MEG0943','RF';'MEG0942','RF';'MEG0933','RF';'MEG0932','RF';'MEG1232','RF';'MEG1233','RF'};

I would like to get an output by matching A with B, returning a cell array say C(6*2) with A values in the column 1 and corresponding B values in column 2.

C = {'MEG0522','LF';'MEG0523','LF';'MEG0512','LF';'MEG0513','LF';'MEG0312','LF'};

Values will not be in an orderly fashion. I would appreciate any support from community members.

  1 Comment

Sign in to comment.

2 Answers

Answer by Carlos Felipe Rengifo on 14 Jul 2018 at 3:21
 Accepted Answer

Please, let me know if the following sentence solves your problem:



Show 1 older comment

In that case, I propose you the following solution:

Flag                = zeros(size(B(:,1)));
for i = 1:length(A)
    Flag            = Flag | strcmp(B(:,1),A(i));
C                   = B(Flag,:);

If the above code does not produce the intended result, please ask again, I will be happy to devise another solution.

Sign in to comment.

Answer by Dave
on 14 Jul 2018 at 17:41
Edited by Dave
on 14 Jul 2018 at 17:42

Just because I'm miserable with loops would using intersect meet your needs? Something like

    [c,s,t] = intersect(A,B);
    C = B(s,:)

  1 Comment

Hi Dave, Yes, this code also works. Thank you so much for your help.

Sign in to comment.