Sorting a cell array of strings on dim

43 views (last 30 days)
Hello All,
Is there a way I can sort along the 2nd dim of a cell array of strings? When I apply sort(x,2) on the example below, I receive the error msg: DIM and MODE arguments not supported for cell arrays.
I have:
x={'book','apple';'dood','tood';'soon','moon'}
x =
'book' 'apple'
'dood' 'tood'
'soon' 'moon'
I want to sort it on 2nd dim, so that I get:
sorted_x=
'apple' 'book'
'dood' 'tood'
'moon' 'soon'
I greatly appreciate your response.
Noushin

Accepted Answer

Guillaume
Guillaume on 17 Dec 2015
Transpose the cell array, sort, and transpose back:
x = {'book','apple';'dood','tood';'soon','moon'};
sorted_x = sort(x')'
  2 Comments
Guillaume
Guillaume on 17 Dec 2015
A generic version of this:
function sorted_c = sort_cell(c, dim)
%c: an Nd cell array
%dim: dimension to sort
permdims = 1:ndims(c);
permdims([1 dim]) = permdims([dim 1]);
sorted_c = permute(sort(permute(c, permdims)), permdims);
end

Sign in to comment.

More Answers (1)

per isakson
per isakson on 15 Dec 2015
Edited: per isakson on 18 Dec 2015
2015-12-18: Fixed a "typo". With R2013a.
Loop over all rows and concatenate
cac = arrayfun( @(jj) sort(x(jj,:)), (1:size(x,1)), 'uni', false )
sorted_x = cat( 1, cac{:} )
outputs
cac =
{1x2 cell} {1x2 cell} {1x2 cell}
sorted_x =
'apple' 'book'
'dood' 'tood'
'moon' 'soon'

Categories

Find more on Shifting and Sorting Matrices 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!