【问题标题】:Sorting an array of objects of elements by an attribute of elements按元素的属性对元素对象数组进行排序
【发布时间】:2015-09-18 00:50:57
【问题描述】:

我有课。让我们称这个类为MyObject

MyObject 有一个名为item 的属性。

如果我创建MyObject 的实例,instanceOfObject.item 就是NSMetadataItem

NSMetadataItems 有一个名为NSMetadataItemFSNameKey 的属性。

我有一个 MyObjects 数组,我想按属性 NSMetadataItemFSNameKey 对该数组进行排序。

我试过了

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:NSMetadataItemFSNameKey
                                                               ascending:YES];

[array sortUsingDescriptors:@[sortDescriptor]];

但这显然会崩溃,因为NSMetadataItemFSNameKey 不是array 的键。就像我说的,NSMetadataItemFSNameKeyinstanceOfObject.item 的一个属性。

有没有办法使用NSSortDescriptors 做到这一点?

【问题讨论】:

    标签: ios nsarray nssortdescriptor


    【解决方案1】:

    我不确定这是否是您要查找的内容,但我使用这种方法按指定的 NSString 属性对自定义对象数组进行排序:

    //Sort the list alphabetically by propertyName
    NSArray* sortedArray;
    sortedArray = [startingArray sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
        NSString* first = [(WSCustomObject*)a propertyName];
        NSString* second = [(WSCustomObject*)b propertyName];
        return [first compare:second];
    }];
    

    您只需确保#import 是您进行此调用的自定义类标头。您还可以通过对这种方法稍作修改来比较其他数据类型。如果除了 NSString 之外,您还有其他特定的数据类型,请告诉我它是什么,我可以帮助您修改它(或者我可能已经有一个浮动的示例,可以展示给您)。

    【讨论】:

    • 我想我将不得不使用这种方法而不是 NSSortDescriptors。谢谢!
    • 另一种方法是让您的类定义自己的比较方法,并改用sortUsingSelector:。但是这个解决方案不需要额外的方法,只需要类的头文件就可以知道属性。此外,块规则。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-18
    • 2016-01-26
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    相关资源
    最近更新 更多