如何排序代表数字的字符串?

时间:2015-05-04 12:35:27

标签: matlab sorting

a=cellstr('10');
b=cellstr('5');
a=char(a);
b=char(b);
c={a,b};
d=sort(c);
>>d
  = '10'  '5'

我想得到'5' '10'。但在这种情况下,它不是提升......

我怎样才能升序?

2 个答案:

答案 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

的更多信息