我有一个NSArray对象(不是NSStrings,而是自定义对象)。每个对象都有一个obj.name
值,我知道如何按名称对NSMutableArray进行排序,如下所示
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
[array sortUsingDescriptors:[NSArray arrayWithObject:sort]];
但是,有些名称以“The”,“A”或“An”开头,如果它们出现的话,我想跳过所有这些名称。无论如何,有没有避免这三种情况并在出现时自动转到下一个单词的方法?
最佳答案
如果我敢于违背迄今为止发布的所有答案,那么对您的字面问题的最简单答案是在您的自定义类上实现一个getter,该方法返回调整后的字符串:
- (NSString *)canonicalName
{
if([self.name rangeOfString:@"The "].location == 0)
return [self.name subStringFromIndex:4];
// etc, etc
}
然后通过在排序描述符中指定'canonicalName'进行排序。
但是,您应该首先考虑遵循QA1159中的建议,并仅使用
NSString
的固有功能来按照Finder应用的相同规则对自身进行排序,我认为这是您要尝试实现的规则的超集。因此,您最终要通过localizedCompare:
比较字符串,该字符串从一开始就在iOS上可用。否则,您几乎要重新发明一个平凡的轮子。例如。
[array sortUsingComparator:
^NSComparisonResult(YourObjectType *obj1, YourObjectType *obj2)
{
return [obj1.name localizedCompare:obj2.name];
}];
关于ios - 按字母顺序对NSArray进行排序,避免使用某些字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14531568/