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

时间:2017-06-02 21:09:40

标签: ios objective-c nsmutablearray dropbox

我试图在一个可变数组的类型上对属性进行排序。 但是我只设法对NSString数组进行排序。

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? ,但我似乎无法让这种情况适用于我的情景。

1 个答案:

答案 0 :(得分:2)

为了使用sortUsingSelector进行排序,您需要在要比较的对象中实现compare方法。 (因此,您的DBFILESMetadata课程需要一种比较方法 - 上面代码中的localizedCaseInsensitiveCompare。)

您应该能够在第二次尝试时使用排序描述符。当你这样做会发生什么?

第三种方法是使用NSMutableArray sortUsingComparator并编写一个比较2个对象的NSComparator块。

我没有使用Objective-C,但是快速的Google搜索找到了一个示例,我根据您的具体问题进行了调整:

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

这应该有用,虽然我说我在Objective-C中没有实践,但它的块语法非常笨拙且反直觉。