包含方括号的字符串的排序函数问题

时间:2018-09-20 15:43:43

标签: matlab sorting

如下所示,当字符串包含方括号时,排序后的数组未按正确的升序排列。有办法解决这个问题吗?

输入:

 A = {'[Test2]','[Test]','[Test1]'}
 sort(A)

输出:

'[Test1]'    '[Test2]'    '[Test]'

输入:

A = {'Test2','Test','Test1'}
sort(A)

输出:

'Test'    'Test1'    'Test2'

2 个答案:

答案 0 :(得分:3)

正如评论所解释的那样,由于12]之前,结果是预期的:

sort(']1')
ans =
'1]'

如果要忽略单元格元素中的括号,可以执行

A1 = regexprep(A, ']$', ''); % remove ending ']'
[~, ind] = sort(A1);
A_sorted = A(ind);

答案 1 :(得分:2)

您可以连接单元格数组,然后使用定界符[]拆分字符串,以形成不包含方括号的字符串单元格数组,并对单元格进行排序,然后使用排序后的元素以对原始单元格数组进行重新排序。

str = [A{:}];
[~,idx] = sort(strsplit(str(2:end-1), {'[',']'}));
result = A(idx)