Ich neu bei Scala. Als Übung versuche ich eine Spielanweisung über eine Liste von Tupeln mit Wachen zu schreiben. Mir ist bewusst, dass eine Karte das Problem lösen würde, aber ich versuche, Verständnis für den Mustervergleich zu bekommen.Scala Matching Liste der Tupel mit Wachen
Ich möchte eine Funktion schreiben, die ein List[(Char, Int)]
als Argument verwendet. Die Funktion sortiert die Einträge und wenn zwei Einträge denselben Schlüsselwert haben, werden sie addiert. Also würde das folgende Argument List(('q', 1'), ('a', 1), ('c', 2), ('a', 2), ('c', 1))
List(('a', 3), ('c', 3'), ('q', 1))
werden.
Ich komme mit dem folgenden Code:
def sortAndAggregateList(chars: List[(Char, Int)]) : List[(Char, Int)] = {
chars match {
case (charP1, numP1) :: (charP2, numP2) :: (x : List[(String, Int)]) if (charP1 > charP2) =>
sortAndAggregateList((charP2, numP2) :: (charP1, numP1) :: x)
case (charP1, numP1) :: (charP2, numP2) :: (x : List[(String, Int)]) if (charP1 < charP2) =>
sortAndAggregateList((charP1, numP1) :: (charP2, numP2) :: x)
case (charP1, numP1) :: (charP2, numP2) :: (x : List[(String, Int)]) if (charP1 == charP2) =>
sortAndAggregateList((charP1, numP1 + numP2) :: x)
case Nil =>
Nil
}
}
Aber ich bekomme die folgende Warnung:
: 14: Warnung: fruchtlos Typprüfung: einen Wert vom Typ List [(Char, Int)] kann nicht auch eine List [(String, Int)] sein (das Underlying von List [(String, Int)]) (aber immer noch mit seinem Löschen übereinstimmen)
Ich habe versucht, die Liste fallen zu lassen, aber wenn ich das tue, bekomme ich eine Fehler, dass x
vom Typ Any
ist.
Irgendwelche Vorschläge?
die Fehlermeldung angezeigt: Sie passen gegen 'chars', die eine' Listen Sie [(Char, Int)] 'auf, aber in dem Muster erwarten Sie, dass' x' eine 'List [(String, Int)]' ist. – Josef