Scala Karte und/oder groupby-Funktionen
Ich bin neu in Scala und ich bin versucht, herauszufinden, einige scala-syntax.
Also ich habe eine Liste von strings.
wordList: List[String] = List("this", "is", "a", "test")
Ich habe eine Funktion, die liefert eine Liste von Paaren enthält, die Konsonanten und Vokale zählt pro Wort:
def countFunction(words: List[String]): List[(String, Int)]
So, zum Beispiel:
countFunction(List("test")) => List(('Consonants', 3), ('Vowels', 1))
Will ich jetzt eine Liste von Wörtern und gruppieren Sie Sie durch zählen Unterschriften:
def mapFunction(words: List[String]): Map[List[(String, Int)], List[String]]
//using wordList from above
mapFunction(wordList) => List(('Consonants', 3), ('Vowels', 1)) -> Seq("this", "test")
List(('Consonants', 1), ('Vowels', 1)) -> Seq("is")
List(('Consonants', 0), ('Vowels', 1)) -> Seq("a")
Bin ich denk ich benutzen müssen, GroupBy, dies zu tun:
def mapFunction(words: List[String]): Map[List[(String, Int)], List[String]] = {
words.groupBy(F: (A) => K)
}
Ich habe gelesen, die scala-api für die Karte.GroupBy und sehen, dass F steht für Diskriminator-Funktion und K ist die Art von Schlüsseln, die Sie erhalten möchten. Also versuchte ich Folgendes:
words.groupBy(countFunction => List[(String, Int)]
Jedoch, scala nicht wie diese syntax. Ich habe versucht, einige Beispiele für groupBy und nichts scheint zu helfen mir mit meinem Anwendungsfall. Irgendwelche Ideen?
InformationsquelleAutor user1772790 | 2012-10-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Basierend auf Ihre Beschreibung, Ihre count-Funktion ist, sollte ein Wort statt einer Liste von Wörtern. Ich würde ihn definieren, wie diese:
Wenn Sie tun, dass Sie sollten in der Lage sein zu rufen
words.groupBy(countFunction)
, das ist das gleiche wie:Wenn Sie nicht ändern Sie die Signatur der
countFunction
haben, dann sollten Sie in der Lage, um die Gruppe durch wie diese:InformationsquelleAutor huynhjl
Sollten Sie nicht setzen Sie den Rückgabetyp der Funktion in dem Aufruf. Der compiler kann dies herauszufinden, selbst. Sie sollten es nur so nennen:
Wenn das nicht funktioniert, poste bitte deine
countFunction
Umsetzung.Update:
Getestet habe ich es in der REPL und das funktioniert (beachten Sie, dass meine
countFunction
hat eine etwas andere Signatur von dir):Du kann gehören die Art der Funktion übergeben
groupBy
, aber wie ich schon sagte, Sie brauchen es nicht. Wenn Sie möchten, übergeben Sie es in Sie es so machen:InformationsquelleAutor DaoWen