Проблема функции сортировки со строками, содержащими квадратные скобки - PullRequest
0 голосов
/ 20 сентября 2018

Как показано ниже, когда строка содержит квадратную скобку, отсортированный массив находится не в правильном порядке возрастания.Есть ли способ обойти эту проблему?

ПЛОХО

Ввод:

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

Вывод:

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

ХОРОШО

Вход:

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

Выход:

'Test'    'Test1'    'Test2'

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Вы можете объединить массив ячеек, а затем разделить строку, используя разделители [ и ], чтобы сформировать массив ячеек из строк, не содержащих скобки, и отсортировать ячейку, а затем использовать индексы отсортированного элемента для изменения порядка.исходный массив ячеек.

str = [A{:}];
[~,idx] = sort(strsplit(str(2:end-1), {'[',']'}));
result = A(idx)
0 голосов
/ 20 сентября 2018

Как поясняется в комментарии, результат ожидается, так как 1 или 2 раньше ]:

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

Если вы хотите игнорировать скобки в элементах ячейки, вы можете сделать

A1 = regexprep(A, ']$', ''); % remove ending ']'
[~, ind] = sort(A1);
A_sorted = A(ind);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...