Scala carte et/ou grouper les fonctions
Je suis nouveau à la Scala et je suis à essayer de comprendre certains scala de syntaxe.
J'ai donc une liste de chaînes de caractères.
wordList: List[String] = List("this", "is", "a", "test")
J'ai une fonction qui retourne une liste de paires qui contient consonnes et des voyelles compte par mot:
def countFunction(words: List[String]): List[(String, Int)]
Ainsi, par exemple:
countFunction(List("test")) => List(('Consonants', 3), ('Vowels', 1))
Je veux maintenant prendre une liste de mots et de les regrouper par comptage des signatures:
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")
Je pense que je dois utiliser GroupBy pour ce faire:
def mapFunction(words: List[String]): Map[List[(String, Int)], List[String]] = {
words.groupBy(F: (A) => K)
}
J'ai lu la scala api pour la Carte.GroupBy et de voir que F représente le discriminant de la fonction et K est le type de touches que vous voulez retourner. J'ai donc essayé ceci:
words.groupBy(countFunction => List[(String, Int)]
Cependant, scala n'aime pas cette syntaxe. J'ai essayé de regarder quelques exemples pour groupBy et rien ne semble pouvoir m'aider avec mon cas d'utilisation. Des idées?
OriginalL'auteur user1772790 | 2012-10-25
Vous devez vous connecter pour publier un commentaire.
En fonction de votre description, votre fonction count doit prendre un mot à la place d'une liste de mots. Je l'ai défini comme ceci:
Si vous faites cela, vous devriez être en mesure d'appeler
words.groupBy(countFunction)
, qui est le même que:Si vous ne pouvez pas changer la signature de
countFunction
, alors vous devriez être en mesure d'appeler group by:OriginalL'auteur huynhjl
Vous ne devez pas mettre le type de retour de la fonction dans l'appel. Le compilateur peut le comprendre lui-même. Vous devriez juste de l'appeler comme ceci:
Si cela ne fonctionne pas, merci de poster votre
countFunction
mise en œuvre.Mise à jour:
Je l'ai testé dans le REPL et cela fonctionne (à noter que mon
countFunction
est un peu différent de la signature de la vôtre):Vous peut inclure le type de la fonction transmise à
groupBy
, mais comme je l'ai dit vous n'en avez pas besoin. Si vous souhaitez passer des dans vous de faire comme ceci:OriginalL'auteur DaoWen