2016-12-09 1 views
0

Ich lerneBestellung in scala

von diesem link Bestellung.

Und ich versuchte, den Code von mir selbst:

val pairs = Array(("a", 5, 2), ("c", 3, 1), ("b", 1, 3)) 
Sorting.quickSort(pairs)(Ordering[(Int, String)].on[(String, Int, Int)]((_._3,_.1)) 

Allerdings gibt es ein Fehler sagt, dass:

Multiple markers at this line 
- type mismatch; found : (String, Int, Int) required: String 
- ')' expected but double literal found. 
- missing parameter type for expanded function ((x$2) => x$2._3) 

Darf ich wissen, wie man es beheben? Danke.

Antwort

3

Das Problem ist hier: ((_._3,_.1))

Sie eine Funktion benötigen, die eine (Int, String) eine einzige (String, Int, Int) und kehrt nimmt. Sie fehlen auch die schließende ) für diese Linie.

Dies wird es für Sie tun: (x=>(x._3,x._1)) Beachten Sie, dass x die Eingangstupel (dreifach) repräsentiert und kann dann mit ._1, ._2 und ._3 indiziert werden.

Sie könnten es auch so machen, {case (a,b,c)=>(c,a)}, die Mustererkennung verwendet, um alle Elemente des Eingabetupels zu benennen, so dass sie ohne Indexierung leicht referenziert werden können.

+0

Können Sie die vollständige Antwort geben, wie ich scala neu bin? danke – sweetyBaby

+0

Bitte stellen Sie sicher, dass Sie verwandte Themen gelesen haben: http: //stackoverflow.com/documentation/scala/686/collections/2262/sort-a-list#t=201612090848077089488. – Pavel

+0

Es tut mir leid, ich verstehe Ihre Anfrage nicht. Ich habe genau darauf hingewiesen, welchen Code ich entfernen muss, habe vorgeschlagen, was Sie ersetzen können, und versucht zu erklären, wie der Ersatzcode funktioniert. Welche Teile davon bedürfen weiterer Klärung? – jwvh