通过包含数字的 属性 的本地化描述对对象数组进行排序
Sorting an Array of objects by localized description of a property that contains a number
我的这个对象有一个名为 nameEN
的 属性,这是该对象的英文名称。当这个对象在屏幕上显示时是这样的:
NSLocalizedStringFromTable([myObject nameEN]);
换句话说,名称是使用NSLocalizedStringFromTable
本地化的。
也就是说,我在一个数组中有很多这样的对象,我想按本地化名称对该数组进行排序。
问题是对象的名称类似于 House 1
、House 2
... House 10
等
当我使用此代码对其进行排序时:
NSArray *sorted = [unsortedArray sortedArrayUsingComparator:^NSComparisonResult(MyOBject *p1, MyOBject *p2){
NSString *name1 = NSLocalizedStringFromTable([p1 nameEN], @"MyTable", nil);
NSString *name2 = NSLocalizedStringFromTable([p2 nameEN], @"MyTable", nil);
return [name1 localizedCompare:name2];
}];
我得到的顺序是House 1
、House 10
、House 2
...10在2之前,20在3之前等等。
如何使用 NSComparisonResult
对其进行排序?
尝试使用启用了 NSBackwardsSearch 选项的 rangeOfCharacter 方法查找最后一个空格。使用此范围,您可以划分字符串并分别比较包含名称的第一部分和包含数字的第二部分。
找到答案:只需将 localizedCompare:
更改为 localizedStandardCompare:
即可完美运行。
我的这个对象有一个名为 nameEN
的 属性,这是该对象的英文名称。当这个对象在屏幕上显示时是这样的:
NSLocalizedStringFromTable([myObject nameEN]);
换句话说,名称是使用NSLocalizedStringFromTable
本地化的。
也就是说,我在一个数组中有很多这样的对象,我想按本地化名称对该数组进行排序。
问题是对象的名称类似于 House 1
、House 2
... House 10
等
当我使用此代码对其进行排序时:
NSArray *sorted = [unsortedArray sortedArrayUsingComparator:^NSComparisonResult(MyOBject *p1, MyOBject *p2){
NSString *name1 = NSLocalizedStringFromTable([p1 nameEN], @"MyTable", nil);
NSString *name2 = NSLocalizedStringFromTable([p2 nameEN], @"MyTable", nil);
return [name1 localizedCompare:name2];
}];
我得到的顺序是House 1
、House 10
、House 2
...10在2之前,20在3之前等等。
如何使用 NSComparisonResult
对其进行排序?
尝试使用启用了 NSBackwardsSearch 选项的 rangeOfCharacter 方法查找最后一个空格。使用此范围,您可以划分字符串并分别比较包含名称的第一部分和包含数字的第二部分。
找到答案:只需将 localizedCompare:
更改为 localizedStandardCompare:
即可完美运行。