【问题标题】:Sort an NSArray by weighting two parameters通过加权两个参数对 NSArray 进行排序
【发布时间】:2017-03-20 13:58:46
【问题描述】:

我有一个 NSArrayNSDictionary。我有两个特定的键,我想用它们来对我的数组进行排序。基本上,我目前有两个NSSortDescriptors:

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

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

我想结合这两个元素来做出更真实​​的排名:例如,70% 的平均笔记和 30% 的评论计数。

我怎样才能做到这一点?

【问题讨论】:

  • 看看这个问题:stackoverflow.com/questions/805547/…。您可以使用块对数组进行排序,并将平均值和计数值乘以上述百分比并比较结果。
  • 太好了,非常感谢。
  • 实现此目的的另一种方法是添加一个计算属性,例如 rank 并使用它进行排序。

标签: objective-c sorting cocoa nsarray nssortdescriptor


【解决方案1】:

此代码将让数组按您想要的排名自行排序,并且数组将按升序排序,如果您希望按降序排列,请将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;
    }
}];

【讨论】:

    猜你喜欢
    • 2013-03-15
    • 1970-01-01
    • 2016-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-07
    相关资源
    最近更新 更多