Objective-C,按字母顺序排序NSMultable类型的类数组?

问题描述:

我想排序一个可变数组类型的属性。 但是我只设法对NSString数组进行排序。Objective-C,按字母顺序排序NSMultable类型的类数组?

NSMutableArray<DBFILESFileMetadata*> *tmpArray = [[NSMutableArray alloc]init]; 

for (DBFILESMetadata *entry in entries) 
{ 
    //conditions 
    [tmpArray addObject:fileMetadata]; 
} 

这里的类型/类

https://github.com/dropbox/dropbox-sdk-obj-c/blob/4c99bdf726cf9724adfddc19e71a87a6012eddeb/Source/ObjectiveDropboxOfficial/Shared/Generated/ApiObjects/Files/Headers/DBFILESMetadata.h

我已经试过

[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在上面的代码。)

你应该也可以使用排序描述符,如你在第二次尝试中显示。当你这样做会发生什么?

第三种方法是使用NSMutableArraysortUsingComparator并编写一个比较这两个对象的NSComparator块。

我出与Objective-C的但快速谷歌搜索的实践中发现的例子,这是我适应您的具体问题:

[entries sortUsingComparator: 
    ^NSComparisonResult(DBFILESMetadata *obj1, DBFILESMetadata *obj2) 
    { 
    return [obj1.name localizedCaseInsensitiveCompare: obj2.name]; 
    }]; 

这应该工作,虽然我说我走了在Objective-C中的实践中,它的块语法是非常尴尬和反直觉的。

+0

请参阅编辑我的答案。我在我的评论中清理了一个类型,并且更改了我提供的用于在代码中使用'localizedCaseInsensitiveCompare'对对象进行排序的代码。 –