2016-11-10 3 views
-2

Ich versuche, eine Suchfunktion zu erstellen, so dass der Benutzer eine Liste mit dem Schlüsselwert durchsuchen kann, aber die Methode Im versucht zu verwenden, gibt einen Typkonflikt zurück, haben unnötigen Code herausgenommen und gezeigt, was ist erforderlich. Wie setze ich Punkte, um einen Int zu nehmen und nicht "Irgendwelche"?Scala Type Mismatch Mapping

"Typ ANY entspricht nicht Int Typ"

val mapdata = readFile("data.txt") 


    def handleTwo(): Boolean = { 
    mnuShowPointsForTeam(currentPointsForTeam) 
    true 
    } 




def mnuShowPointsForTeam(f: (String) => (String, Int)) = { 
    print("Team>") 
    val data = f(readLine) 
    println(s"${data._1}: ${data._2}") 
    } 



    def currentPointsForTeam(team: String): (String, Int) = { 
    val points = mapdata.get(team) match{ 
     case Some(p) => p 
     case None => 0 
    } 
    (team, points) 
    } 

Die data.txt

SK1, 9, 7, 2, 0, 7, 3, 7, 9, 1, 2, 8, 1, 9, 6, 5, 3, 2, 2, 7, 2, 8, 5, 4, 5, 1, 6, 5, 2, 4, 1 
SK2, 0, 7, 6, 3, 3, 3, 1, 6, 9, 2, 9, 7, 8, 7, 3, 6, 3, 5, 5, 2, 9, 7, 3, 4, 6, 3, 4, 3, 4, 1 
SK4, 2, 9, 5, 7, 0, 8, 6, 6, 7, 9, 0, 1, 3, 1, 6, 0, 0, 1, 3, 8, 5, 4, 0, 9, 7, 1, 4, 5, 2, 8 
SK5, 2, 6, 8, 0, 3, 5, 5, 2, 5, 9, 4, 5, 3, 5, 7, 8, 8, 2, 5, 9, 3, 8, 6, 7, 8, 7, 4, 1, 2, 3 
SK6, 2, 7, 5, 9, 1, 9, 8, 4, 1, 7, 3, 7, 0, 8, 4, 5, 9, 2, 4, 4, 8, 7, 9, 2, 2, 7, 9, 1, 6, 9 
SK7, 6, 9, 5, 0, 0, 0, 0, 5, 8, 3, 8, 7, 1, 9, 6, 1, 5, 3, 4, 7, 9, 5, 5, 9, 1, 4, 4, 0, 2, 0 
SK8, 2, 8, 8, 3, 1, 1, 0, 8, 5, 9, 0, 3, 1, 6, 8, 7, 9, 6, 7, 7, 0, 9, 5, 2, 5, 0, 2, 1, 8, 6 
SK9, 7, 1, 8, 8, 4, 4, 2, 2, 7, 4, 0, 6, 9, 5, 5, 4, 9, 1, 8, 6, 3, 4, 8, 2, 7, 9, 7, 2, 6, 6 
+0

Was ist der Typ von 'mapData'? Was ist der Rückgabewert für 'mnuShowPointsForTeam' (jetzt nur noch printlns)? – Thilo

+0

aktualisiert die Frage, MapData ist eine externe TXT-Datei, ja, es nur printlns das Team, das Schlüsselwert eingegeben wird @Thilo –

+0

Aber was ist der Typ von 'mapData'? Ist es "Map [String, Any]"? Wenn Sie diese Map [String, Int] nicht erzeugen können, dann müssen Sie innerhalb dieses 'case Some (p)' - Teils in Int konvertieren. – Thilo

Antwort

3

Es sieht aus wie Sie ein Tupel mit einem List[Int], nicht nur eine einzige zurückkehren wollen Int .

Wenn ja

def currentPointsForTeam(team: String): (String, List[Int]) = 
    (team, mapdata.get(team).getOrElse(List.empty)) 
    // Or maybe List(0) instead of List.empty 

Wenn Sie ein einzelnes Int zurückkehren wollen, müssen Sie sagen, wie aus den List[Int] in der Karte auf einen einzelnen Wert zu gehen. Vielleicht eine Summe?

def currentPointsForTeam(team: String): (String, Int) = 
    (team, mapdata.get(team).map(_.sum).getOrElse(0)) 
+0

Kopf des Nagels, genau das habe ich versucht zu erreichen! Danke –

+0

Das erste Beispiel funktionierte gut, aber die zweite nimmt in einem String Int und nicht eine String-Liste int, wie würde das funktionieren? Habe es gerade getestet und ich bekomme einen Typunterschied @Thilo –

+0

Ignoriere den letzten Kommentar, getippt, bevor ich dachte! Das funktioniert jetzt, danke nochmal –