在 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”
。我查了一下。
最佳答案
如果所有名字都具有相同的长度,那么您将能够使用sortrows
,但在您的情况下,无论如何,这将需要填充和修改您的数组,以便您更好在应用排序
之前,不要将其转换为“LAST FIRST MIDDLE”
。幸运的是,有一个简单的正则表达式可以实现这一点:
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'
关于regex - 按姓氏字母顺序对字符串元胞数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9757957/