2015-11-10 5 views
0

В Matlab У меня есть массив structs("sort_on_this", ...)Сортировка по Matlab В структурах

Как отсортировать массив на на sort_on_this?

Пример того, что я пытаюсь сделать,

list_to_sort = [struct('a', 4), struct('a', 0), struct('a', 3), struct('a', 1)] 
sort(list_to_sort on 'a') = 
     [struct('a', 0), struct('a', 1), struct('a', 3), struct('a', 4)] 

редактировать: вопрос не duplicate, потому что другой вопрос имеет массивы в пределах структуры, которую необходимо сортировать, тогда как это массив структур, которые необходимо сортировать.

+0

Сортировать по отношению к чему? Содержание? Имя? Размер? – Adriaan

+0

@Adriaan Я хочу сортировать в отношении переменной sort_on_this, которая является номером –

+0

@rayryeng Я попытался использовать решение, которое вы отметили [вопрос дубликат] (http://stackoverflow.com/a/29055553/3024116), чтобы , но в нем есть списки внутри структуры, а не список структур. Так что этот вопрос другой. –

ответ

3

Как вы, вероятно, выяснили, нормальный sort не работает с structs. Однако вы можете построить массив значений , который затем сортирует и использует новый заказ для изменения порядка исходного массива.

Начиная с нашей структурой массивом:

list_to_sort = [struct('a', 4), struct('a', 0), struct('a', 3), struct('a', 1)] 

Получить значение структуры поля в массив:

a_values = [list_to_sort.a] 

a_values = 
    4 0 3 1 

Теперь, вроде a_values, держа второе возвращаемое значение из sort, который дает нам оригинал индексы отсортированных значений.

[~,inds] = sort(a_values) 
inds =  
    2 4 3 1 

Наконец, использовать эти показатели, чтобы реорганизовать свой-структуру:

sorted_list = list_to_sort(inds) 

>> disp([sorted_list.a]) 
    0 1 3 4 
Смежные вопросы