按不区分大小写的属性对Realm结果进行排序

4
我正在按照一个叫做“alphabet”的属性对我的结果进行排序,就像这样:

allArtists = Artist.allObjects().sortedResultsUsingProperty("alphabet", ascending: true)

如何进行不区分大小写的排序?当前,"cop"将出现在"Cat"之前。

不受 Realm 支持的操作需要进行自定义处理。最好的方法可能类似于 Velthune 描述的,因此您将构建一个排序正确的新 NSArray。 - yoshyosh
2个回答

4
如果你想保留使用 RLMResults 对象的好处,另一种方法是在你的模型上添加一个不区分大小写的属性副本:
class Artist: RLMObject {
    /// Some original property you want to sort by
    dynamic var name = "" {
        didSet {
            // Keep the case-free property in sync 
            lowercaseName = name.lowercaseString
        }
    }

    /// A new property just for case-insensitive sorting
    dynamic var lowercaseName = ""
}

然后您可以根据新属性进行排序:
let caseInsensitiveArtists = Artist.allObjects()
    .sortedResultsUsingProperty("lowercaseName", ascending: true)

1
一般来说,您需要编写自定义比较方法:
sortedArray = [array ArrayUsingSelector:@selector(customCompare:)];

customCompare是你的对象的一个方法:

- (NSComparisonResult)customCompare:(NSString*)string {
    return [[string lowercaseString] compare:[self.string lowercaseString]];
}

在您的情况下,简单地说就是:
sortedArray = [array sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接