dhutama
dhutama

Reputation: 56

Rearranging cells in a cell array

I have a 16x1 cell array which I would like to rearrange:

{'T1' }
{'T10'}
{'T11'}
{'T12'}
{'T13'}
{'T14'}
{'T15'}
{'T16'}
{'T2' }
{'T3' }
{'T4' }
{'T5' }
{'T6' }
{'T7' }
{'T8' }
{'T9' }

How can I rearrange this to maintain the 16x1 structure, but sorted as

{'T1' }
{'T2' }
{'T3' }
{'T4' }
{'T5' }
{'T6' }
{'T7' }
{'T8' }
{'T9' }
{'T10'}
{'T11'}
{'T12'}
{'T13'}
{'T14'}
{'T15'}
{'T16'}

Thanks for your time.

Upvotes: 0

Views: 102

Answers (3)

dhutama
dhutama

Reputation: 56

I ended up solving the question by cutting the array and rearranging as follows:

inv = {16x1 data above}

tmpinv = inv([1, 9:16]);
tmpinv2 = inv(2:8);
inv = [tmpinv; tmpinv2];

However, I accepted rahnema1's answer as more robust solution.

Upvotes: 0

rahnema1
rahnema1

Reputation: 15867

You can convert the strings to a vector of numbers (using sscanf) and use the indexes of the sorted numbers to rearrange the original cell array A:

[~, idx] = sort(sscanf([A{:}], 'T%d', numel(A)));
B = A(idx);

Upvotes: 4

kpv
kpv

Reputation: 35

sortrows(yourarray)

should do the job

Documentation: sortrows

Upvotes: 1

Related Questions