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

Objective-C, Sorting an NSMultable array of type class, alphabetically?

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

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

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

这是类型/class

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 class 需要一个比较方法——上面代码中的 localizedCaseInsensitiveCompare。)

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

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

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

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

这应该行得通,尽管正如我所说,我没有练习 Objective-C,而且它的块语法非常笨拙且违反直觉。