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

标签 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? 但我似乎无法让它适用于我的场景。

最佳答案

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

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

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

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

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

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

关于ios - Objective-C,按字母顺序对类型类的 NSMultable 数组进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44337475/

相关文章:

ios - 从 NSMutableArray 错误中删除值

ios - Nsinteger 可访问问题

iphone - 替换对象索引 :withObject: not working when passing in a NSString object

android - cordova-plugin-contacts-不获取所有事件日期

ios - 适用于 iOS 投票应用的最佳 BaaS

javascript - 没有调用Parse.Installation beforeSave

ios - didSelectAnnotationView 不调用自定义 MKAnnotationView

ios - 如何使用 swift 在 IOS map 上叠加图像

ios - 如何在用户不移动时自动暂停 GPS 跟踪器

ios - 如何在 iOS 中复制启动图像