【问题标题】:Objective-C, Sorting an NSMultable array of type class, alphabetically?Objective-C,按字母顺序对类型类的 NSMultable 数组进行排序?
【发布时间】:2017-11-04 08:52:10
【问题描述】:

我正在尝试对可变数组类型的属性进行排序。 但是我只设法对一个 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? ,但我似乎无法让它适用于我的场景。

【问题讨论】:

    标签: ios objective-c nsmutablearray dropbox


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

    • 查看我的答案的编辑。我清理了我的 cmets 中的一个类型,还更改了我提供的代码,以使用 localizedCaseInsensitiveCompare 对您的对象进行排序,如您在代码中所示。
    猜你喜欢
    • 2013-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-14
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    相关资源
    最近更新 更多