2017-03-20 2 views
1

Ich habe eine NSArray von NSDictionary. Ich habe zwei spezifische Schlüssel, mit denen ich mein Array sortieren möchte. Grundsätzlich habe ich zur Zeit zwei NSSortDescriptor s:Sortiere ein NSArray durch Gewichtung zweier Parameter

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

Sie einfach sortieren meine Array basiert auf der durchschnittlichen Note seiner Elemente, und dann in zweiter Linie auf die Anzahl der Bewertungen basieren.

Ich möchte diese beiden Elemente kombinieren, um ein realistischeres Ranking zu erstellen: zum Beispiel 70% durchschnittliche Note und 30% Review-Zahl.

Wie kann ich das erreichen?

+0

Überprüfen Sie diese Frage: http://stackoverflow.com/questions/805547/how-to-sort-an-nsmutablearray-with-custom-objects-in-it. Sie können das Array mithilfe eines Blocks sortieren und den Durchschnitt und die Anzahl der Werte mit den oben beschriebenen Prozentsätzen multiplizieren und das Ergebnis vergleichen. –

+0

Großartig, vielen Dank. –

+0

Eine andere Möglichkeit, dies zu erreichen, besteht darin, eine berechnete Eigenschaft say 'rank' hinzuzufügen und diese zum Sortieren zu verwenden. –

Antwort

0

Mit diesem Code wird das Array nach dem gewünschten Rang sortiert, und das Array wird aufsteigend sortiert. Wenn Sie es absteigend ändern möchten, ändern Sie NSOrderedAscending in 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; 
    } 
}]; 
Verwandte Themen