2015-11-10 82 views
0

在Matlab中我有structs("sort_on_this", ...)排序上的Structs在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不適用於結構。但是,您可以構建一個的數組,然後對其進行排序並使用新排序對原始結構數組重新排序。

與我們的結構數組開始:

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