在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 :(得分: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'