【问题标题】:NSPredicate Sort Array and Order DESCNSPredicate 排序数组和顺序 DESC
【发布时间】:2012-01-13 15:49:13
【问题描述】:

我有一个包含TBPostsNSMutableArray,我想按照commentsCountlikesCountTBPost 的降序过滤。

最初,过滤后的数组中的第一个对象将是 cmets 和 likes 数量最多的对象,可以通过将两者相加得出。所以我尝试了以下查询并收到无法解析的错误。请问你能告诉我哪里出错了吗?

[posts filterUsingPredicate:[NSPredicate predicateWithFormat:@"post.commentsCount + post.likesCount DESC"]];

【问题讨论】:

    标签: objective-c cocoa-touch filter nsmutablearray nspredicate


    【解决方案1】:

    过滤不是排序。你用错了方法。

    使用比较器,它看起来像这样:

    [posts sortUsingComparator:^NSComparisonResult(id p1, id p2) {
        if (p1.commentsCount + p1.likesCount < p2.commentsCount + p2.likesCount)
            return (NSComparisonResult)NSOrderedAscending;
        if (p1.commentsCount + p1.likesCount > p2.commentsCount + p2.likesCount)
            return (NSComparisonResult)NSOrderedDescending;
        return (NSComparisonResult)NSOrderedSame;
    
    }];
    

    【讨论】:

    • 排序描述符有能力做我想做的事吗?
    • 我只是在查看文档——我通常更喜欢比较器,但 sortDescriptor 可以。
    • //下面应该做的。不需要做所有情况 [posts sortUsingComparator:^NSComparisonResult(id p1, id p2) { return (p1.cmetsCount + p1.likesCount)
    • @Komposr:这可能是有害的。 NSComparisionResult 是一个类型定义的整数,其值为 0f -1,0,1,而关系运算符返回 01。所以你的代码不会涵盖 NSOrderedSame 的情况。
    • 不是说用NSOrderedSame,返回哪个都无所谓吗?比如尝试排序:0,1,2,2,3...
    猜你喜欢
    • 1970-01-01
    • 2012-12-14
    • 2021-10-07
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 2015-01-15
    • 2020-09-12
    • 2011-06-08
    相关资源
    最近更新 更多