a=cellstr('10');
b=cellstr('5');
a=char(a);
b=char(b);
c={a,b};
d=sort(c);
>>d
= '10' '5'
我想得到'5' '10'
。但在这种情况下,它不是提升......
我怎样才能升序?
答案 0 :(得分:1)
你应该更清楚你的问题,而不是在评论中添加信息。 如果我理解正确,你想要一种方法来对所有数字和单词进行排序。让我们来看一个包含所有这些的样本单元格:
c = {'apple';'10';'able';'5'} ;
然后以下内容将在2遍中对数组进行排序。第一遍将基于纯ascii值对数组进行排序,因此单词将被正确排序,但数字仍然会显示您在问题中提到的行为。然后第二遍将获取代表数字的所有字符串,对它们进行排序,然后将它们放回到数组中。
%// First pass, sort the pure text fields
c_half_sorted = cellstr( char(sortrows(double(char(c))))) ;
%// second pass, sort the numbers
c_numbers = cellfun( @(a) sscanf(a,'%f') , c_half_sorted , 'uni',0) ; %// convert what we can in numbers
isNumber = cellfun( @(a) ~isempty(a) , c_numbers ) ; %// index what has been converted
%// sort numbers and convert back to string/cell
c_num = strtrim (cellstr( num2str( sort( cell2mat( c_numbers(isNumber) ) ,'ascend')))) ;
%// Merge sorted numbers and words
c_sorted = [ c_num ; c_half_sorted(size(c_num,1)+1:end) ] ;
结果中途是:
c_half_sorted =
'10'
'5'
'able'
'apple'
然后在第二遍后:
c_sorted =
'5'
'10'
'able'
'apple'
答案 1 :(得分:0)
我找到了答案。这里it是
有很多类型的转换和排序。关于你的例子,它可以如下完成
C = {'30', 'a', 'p', 'p', 'l', 'e', '1'};
a=str2double(C);
characters=C(isnan(a));
Str = sprintf('%s', characters{:});
numar=Str-0;
[~, index] = sort(numar);
characters = characters(index);
numbers=C(~isnan(a));
numbers = sort(numbers);
C=[numbers, characters];
结果是C = '1' '30' 'a' 'e' 'l' 'p' 'p'
诀窍在第五行,我将字符转换为数字。以下是有关解码chars to numbers