it-swarm.com.de

Scala groupNach einer Liste

Ich möchte eine Map erstellen, in der der Schlüssel die Zeichenfolge und der Wert die Häufigkeit angibt, mit der die Zeichenfolge in der Liste angezeigt wird. Ich habe die groupBy-Methode ausprobiert, war aber damit nicht erfolgreich.

4
T.Simmari

Erforderliche Antwort

scala> val l = List("abc","abc","cbe","cab")
l: List[String] = List(abc, abc, cbe, cab)

scala> l.groupBy(identity).mapValues(_.size) 
res91: scala.collection.immutable.Map[String,Int] = Map(cab -> 1, abc -> 2, cbe -> 1)

Angenommen, Sie haben eine Liste als

scala> val list = List("abc", "abc", "bc", "b", "abc")
list: List[String] = List(abc, abc, bc, b, abc)

Sie können eine Funktion schreiben

scala> def generateMap(list: List[String], map:Map[String, Int]) : Map[String, Int] = list match {
     |       case x :: y => if(map.keySet.contains(x)) generateMap(y, map ++ Map(x -> (map(x)+1))) else generateMap(y, map ++ Map(x -> 1))
     |       case Nil => map
     |     }
generateMap: (list: List[String], map: Map[String,Int])Map[String,Int]

Rufen Sie dann die Funktion as auf

scala> generateMap(list, Map.empty)
res1: Map[String,Int] = Map(abc -> 3, bc -> 1, b -> 1)
0
Ramesh Maharjan