2012-03-18 46 views
2

在Matlab中,我有這樣一個單元陣列:排序串字母的單元陣列按姓氏

names = { 
    'John Doe', 
    'Jane Watkins', 
    'Jeremy Jason Taylor', 
    'Roger Adrian' 
    } 

我想排序這些使得按字母順序排列的姓氏。在我的例子中,它會出現:

names_sorted = { 
    'Roger Adrian', 
    'John Doe', 
    'Jeremy Jason Taylor', 
    'Jane Watkins' 
    } 

我知道這樣做的不雅途徑。例如,我可以在空間進行標記,製作單獨的last_names單元陣列,對其進行排序,然後將索引應用於我的原始數組。

我的問題是,有沒有更好的方法?

因爲有人一定會想出關於數據庫中人名的假設列表,請允許我向您保證我所有的姓名都是"FIRST MIDDLE LAST""FIRST LAST"。我檢查了。

+0

據我所知,你將不得不排序輔助陣列和索引向原一個,唯一的排序功能的MATLAB,我知道穿上」讓你指定一個排序條件......但現在你讓我好奇 – Castilho 2012-03-18 11:45:50

回答

3

如果所有的名字有相同的長度,那麼你就可以使用sortrows,但在你的情況,這將需要填充和修改陣列,反正讓你最好轉換成"LAST FIRST MIDDLE"前申請sort。幸運的是,對於一個簡單的正則表達式:

names = {'John Doe';'Roger Adrian';'John Fitzgerald Kennedy'}; 
names_rearranged = regexprep(names,'(.*) (\w*)$','$2 $1') 
names_rearranged = 
    'Doe John' 
    'Adrian Roger' 
    'Kennedy John Fitzgerald' 

[names_rearranged_sorted, idx_sorted] = sort(names_rearranged); 

names_sorted = names(idx_sorted) 
names_sorted = 
    'Roger Adrian' 
    'John Doe' 
    'John Fitzgerald Kennedy'