2016-08-03 14 views
0

Ich habe eine Liste der Attribute (Typs zu einem höheren, Preis), wie die unten in Scala hat:Sortierung aufsteigende und absteigende in einer Liste

ListBuffer(RatingAndPriceDataset(3.5,200), RatingAndPriceDataset(4.5,500),RatingAndPriceDataset(3.5,100), RatingAndPriceDataset(3.0,100)) 

Mein Sortieren Prioritätsreihenfolge: Erste nach auf der Grundlage von Sternbewertung (absteigend) und wählen Sie dann drei niedrigste Preise. So in dem obigen Beispiel, erhalte ich die Liste als:

RatingAndPriceDataset(4.5,500),RatingAndPriceDataset(3.5,100), RatingAndPriceDataset(3.5,200) 

wie die Sterne zu sehen ist derjenige, der in Art als höhere Priorität kommt. Ich habe ein paar Dinge ausprobiert, aber ich habe es nicht geschafft. Wenn ich auf der Basis einer Sternbewertung nach Preis sortiere, wird die Prioritätsreihenfolge nicht eingehalten.

Was ich von einem Aufruf einer Methode bekomme, ist eine Liste wie diese (wie oben). Die Liste wird einige Daten wie unten (Beispiel):

StarRating Price 
3.5   200 
4.5   100 
4.5   1000 
5.0   900 
3.0   1000 
3.0   100 


**Expected result:** 

StarRating Price 
5.0   900 
4.5   100 
4.5   1000 
+0

Wenn Sie wählen drei niedrigsten Preise, wie haben Sie 'PriceDataset (4.5, 500)' '? Fehle ich etwas? – ganesshkumar

+0

@ 911DidBush Ich bin nicht in der Lage, eine verschachtelte oder Priorität sortieren. Also, wenn ich auf Basis von Star Rating sortiere, gefolgt von einer Sortierung nach Preisen, bekomme ich die Ergebnisse nicht wie erwartet. Hilft es? –

+0

@Ganesshkumar: Ich habe die Beschreibung verbessert. Meine Sortierungsprioritätsreihenfolge ist also Sternbewertung und dann Preise. ich hoffe es hilft –

Antwort

3

Unter Verwendung der Daten in der Tabelle, die Sie zur Verfügung gestellt haben (die als die Daten in Ihrem Code unterschiedlich ist):

val input = ListBuffer(RatingAndPriceDataset(3.5,200), RatingAndPriceDataset(4.5,100),RatingAndPriceDataset(4.5,1000), RatingAndPriceDataset(5.0, 900), RatingAndPriceDataset(3.0, 1000), RatingAndPriceDataset(3.0, 100)) 
val output = input.sortBy(x => (-x.StarRating, x.Price)).take(3) // By using `-` in front of `x.StarRating` we're getting descending order of sorting 

println(output) // ListBuffer(RatingAndPriceDataset(5.0,900), RatingAndPriceDataset(4.5,100), RatingAndPriceDataset(4.5,1000)) 
Verwandte Themen