# Group array in a cell according to their size

36 views (last 30 days)
kix on 5 Jul 2020 at 10:18
Commented: kix on 5 Jul 2020 at 11:53
Hi everyone!
I've got a cell wich contains array like this : A={[1 2 3 4] [4 5 6 9] [1 2 3] [7 8 9] [1 2] [3 4]}
and I would like to group the arrays in this cell according to their size and get the indexes where they have been found in A and have the following result :
expected_result={{[1 2 3 4] [4 5 6 9]} {[1 2 3] [7 8 9]} {[1 2] [3 4]}}
idx_in_A={[1 2] [3 4] [5 6]}

Thiago Henrique Gomes Lobato on 5 Jul 2020 at 10:34
A direct implementation could be done like this:
A={[1 2 3 4] [4 5 6 9] [1 2 3] [7 8 9] [1 2] [3 4]};
sizes= [];
for idx=1:length(A)
Vsize = length(A{idx});
if ~ismember(Vsize,sizes)
sizes = [sizes,Vsize];
Pos = find(ismember(sizes,Vsize));
idx_in_A{Pos} = idx;
else
Pos = find(ismember(sizes,Vsize));
idx_in_A{Pos} = [idx_in_A{Pos},idx];
end
end
expected_result = cell(length(idx_in_A),1);
for idx= 1:length(idx_in_A)
expected_result{idx} = {A{idx_in_A{idx}}};
end

#### 1 Comment

kix on 5 Jul 2020 at 11:53
thank you !

Sumeet Singh on 5 Jul 2020 at 10:30
You can use one containers.Map to group same sized arrays and another for storing the indices.

#### 1 Comment

kix on 5 Jul 2020 at 11:52
Thank you !