2017-11-16 5 views
0

私は、キーが文字列であり、値がその文字列がリストに何回出現するかの数であるマップを作成したいと考えています。私はgroupByメソッドを試しましたが、失敗しました。Scala groupByリスト

+0

マップを表示できますか?そしてあなたの望む出力は何ですか? –

+0

私のリストは[abc、abc、cbe、cab]です。これを試しましたが、うまくいきません。 val c = b.groupBy(identity).mapValues(_。size)マップをこのように見たい(abc-> 2、cbe-> 1、cab-> 1) –

+0

地図を表示する"b"の内容 –

答えて

1

必要な回答

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) 
0

はあなたが

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] 

関数を書くことができます

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

としてあなたが次に関数を呼び出すリストを持っていると仮定しますとして

scala> generateMap(list, Map.empty) 
res1: Map[String,Int] = Map(abc -> 3, bc -> 1, b -> 1) 
関連する問題