通过加权两个参数来排序NSArray

问题描述:

我有NSArrayNSDictionary。我有两个特定的键我想用来排序我的数组。基本上,我现在有两个NSSortDescriptor S:通过加权两个参数来排序NSArray

descriptor = [NSSortDescriptor sortDescriptorWithKey:@"averageNote" ascending:NO]; 
descriptor2 = [NSSortDescriptor sortDescriptorWithKey:@"[email protected]" ascending:NO]; 

他们只是我的排序基于平均注意到其元素的数组,然后在第二位基于评论数量。

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

我该如何做到这一点?

+0

看看这个问题:http://stackoverflow.com/questions/805547/how-to-sort-an-nsmutablearray-with-custom-objects-in-it。您可以使用块对数组进行排序,并可以将平均值和计数值乘以上述百分比并比较结果。 –

+0

太好了,非常感谢。 –

+0

完成此操作的另一种方法是添加计算属性say'rank'并将其用于排序。 –

这个代码将让您想要军衔的数组排序本身,阵列将被升序排列,如果按降序想它,改变NSOrderedAscendingNSOrderedDescending

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; 
    } 
}];