Objective-C,按字母顺序排序NSMultable类型的类数组?
问题描述:
我想排序一个可变数组类型的属性。 但是我只设法对NSString数组进行排序。Objective-C,按字母顺序排序NSMultable类型的类数组?
NSMutableArray<DBFILESFileMetadata*> *tmpArray = [[NSMutableArray alloc]init];
for (DBFILESMetadata *entry in entries)
{
//conditions
[tmpArray addObject:fileMetadata];
}
这里的类型/类
我已经试过
[yourArray sortUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
和
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
[yourArray sortUsingDescriptors:[NSArray arrayWithObject:sort]];
的属性称为名称。
我见过这样的回答,像这样How can I sort an NSMutableArray alphabetically?但我似乎无法得到这个工作为我的情况。
答
为了使用sortUsingSelector进行排序,您需要在您尝试比较的对象中实现比较方法。 (所以你的DBFILESMetadata
类将需要一个比较方法 - localizedCaseInsensitiveCompare
在上面的代码。)
你应该也可以使用排序描述符,如你在第二次尝试中显示。当你这样做会发生什么?
第三种方法是使用NSMutableArray
sortUsingComparator
并编写一个比较这两个对象的NSComparator
块。
我出与Objective-C的但快速谷歌搜索的实践中发现的例子,这是我适应您的具体问题:
[entries sortUsingComparator:
^NSComparisonResult(DBFILESMetadata *obj1, DBFILESMetadata *obj2)
{
return [obj1.name localizedCaseInsensitiveCompare: obj2.name];
}];
这应该工作,虽然我说我走了在Objective-C中的实践中,它的块语法是非常尴尬和反直觉的。
请参阅编辑我的答案。我在我的评论中清理了一个类型,并且更改了我提供的用于在代码中使用'localizedCaseInsensitiveCompare'对对象进行排序的代码。 –