Sort a cell array of char
30 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Hi,
I have a cell array of chars (some of the cells should be strings while other should be doubles). Now I am trying to sort several of the rows that should be doubles and I get, of course, a sort from the left of the number as : 1001, 112, 14.. Tried to convert to double with both writing sort(double(...)) and cellfun(@double, ...,'Uniformoutput', false) and it won't accept: 1) ??? Error using ==> double Conversion to double from cell is not possible." 2)??? Error using ==> sort Input argument must be a cell array of strings. What can I do to get 14, 112, 1001... Thank you Keren
0 Kommentare
Akzeptierte Antwort
Jan
am 4 Apr. 2011
The question is not clear. This is a contradiction:
1. "cell array of chars" 2. "(some of the cells should be strings while other should be doubles)"
From the later text I guess, you want to sort a cell vector which contains scalar doubles:
C = {1001, 112, 14};
[dummy, index] = sort([C{:}]);
sortedC = C(index);
CELLFUN(@double, ...) converts each element of the cell to a DOUBLE - therefore it does no change anything here!
EDITED: Now a method to sort a cell string according to the numbers the strings represent:
C = {'1001', '112', '14'};
Str = sprintf('%s,', C{:});
D = sscanf(Str, '%g,');
[dummy, index] = sort(D);
sortedC = C(index);
3 Kommentare
Weitere Antworten (1)
Teja Muppirala
am 4 Apr. 2011
Instead of just "double" you should use "str2double". I'm pretty sure that does what you want.
A = {'1001', '112', '14'}
B = str2double(A)
[Bsorted,ordering] = sort(B)
3 Kommentare
Jan
am 4 Apr. 2011
And SPRINTF still wastes time, because it does not pre-allocate the output. Therefore using http://www.mathworks.com/matlabcentral/fileexchange/26077-cstr2string will make it twice as fast:
tic; e = sscanf(CStr2String(C, ','), '%g,'); toc % 0.005 sec
Siehe auch
Kategorien
Mehr zu Cell Arrays finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!