ios - 按字母顺序对NSArray进行排序,避免使用某些字符

标签 ios objective-c nsmutablearray nssortdescriptor

我有一个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/

相关文章:

ios - ios应用程序更新后是否有一些自动恢复

ios - 无法将 double 的 NSArray 保存到文件 ios

objective-c - 图像选择器立即出现在 iPad 上

ios - 排序 NSMutableArray 的问题

ios - 在自定义 NSMutableArray 中断言属性

cocoa - 在不释放对象的情况下删除ObjectAtIndex

ios - 增加高度后,UIToolBar按钮未正确定位

ios - 将 @dynamic 与核心数据一起使用时发送到实例的无法识别的选择器

iOS Storekit 导致实时应用程序崩溃

ios - TableView 自动重新排序