通过加权两个参数

时间:2017-03-20 13:58:47

标签: objective-c sorting cocoa nsarray nssortdescriptor

我有NSArray NSDictionary。我有两个特定的键,我想用它来排序我的数组。基本上,我目前有两个NSSortDescriptor s:

descriptor = [NSSortDescriptor sortDescriptorWithKey:@"averageNote" ascending:NO];
descriptor2 = [NSSortDescriptor sortDescriptorWithKey:@"reviews.@count" ascending:NO];

他们只是根据元素的平均音符对数组进行排序,然后根据评论的数量排在第二位。

我想将这两个元素结合起来,使得排名更加真实:例如,70%的平均音符和30%的评论数。

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

此代码将让数组按您想要的等级排序,并且数组将按升序排序,如果您希望按降序排序,请将NSOrderedAscending更改为NSOrderedDescending

NSMutableArray *array = [@[] mutableCopy];
[array sortedArrayWithOptions:NSSortStable usingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {
    aClass a = obj1;
    aClass b = obj2;
    float rankOfA = a.averageNote*0.7 + a.reviewCount*0.3;
    float rankOfB = b.averageNote*0.7 + b.reviewCount*0.3;
    if (rankOfA > rankOfB) {
        return NSOrderedAscending;
    }
}];