2012-03-18 61 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'