按姓氏的字母顺序对字符串的单元格数组进行排序

时间:2012-03-18 11:34:34

标签: regex matlab sorting names

在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" 。我查了一下。

1 个答案:

答案 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'