# Search through every vector in cell array for the vector that contains a certain value

2 views (last 30 days)
han on 12 Apr 2020
Commented: han on 12 Apr 2020
Hiya,
I have the below code, which instead of searching through every vector in the cell array for a vector that contains the number 1, it goes to the last vector in the cell array and returns false.
my cell array is called nodey and contains in position {1,1} - [1,2] and in position {1,2} - [3,4]
for i = 1:length(nodey)
ismember(nodey{i},1);
end
I need it so that it returns true for the first vector, and then i can return nodey{i} and it'll be [1,2] since the value is in the first vector
Thanks!

per isakson on 12 Apr 2020
Try this
%%
nodey = {[1,2],[3,4]};
%%
has_one = false(1,length(nodey));
for ii = 1:length(nodey)
has_one(ii) = ismember( 1, nodey{ii} );
end
%%
has_one
nodey{ has_one }
%%
ix_one = find( has_one )
nodey{ ix_one }
it displays
has_one =
1×2 logical array
1 0
ans =
1 2
ix_one =
1
ans =
1 2

#### 1 Comment

han on 12 Apr 2020
This worked perfectly!! Thank you so much
Have a nice day

dpb on 12 Apr 2020
Your code above doesn't save the result going thru the loop so you only show the final result at the end---
ix=cellfun(@(v) ismember(1,v),nodey,'UniformOutput',1);
>> ix
ix =
2×1 logical array
1
0
>>
Better form for coding would be to put the value to search for in a variable so can only change the variable to look for alternate values...
VFIND=1;
ix=cellfun(@(v) ismember(VFIND,v),nodey,'UniformOutput',1);
BTW: NB the order of arguments to ismember to have the first value the one-element searched-for value so returns a single result instead of a logical vector of numel(nodey) as the first output.

#### 1 Comment

han on 12 Apr 2020
Ahh I see! Thats useful to know in the future too
Thank you!