Сбой при выборе файла из загрузок

Заголовок вопроса читается как «Scala count chars в строковой логической ошибке». Но вы используете карту, и вы хотите считать как ключи. Равные клавиши не допускаются в объектах карты. Следовательно, равные ключи устраняются в полученной карте, сохраняя только одну, потому что не допускается дублирование ключей. То, что вы хотите, может быть Seq кортежей вроде (count, char), например List [Int, Char]. Попробуйте это.

 val x = "abcabca"
 x.groupBy(identity).mapValues(_.size).toList.map{case (x,y)=>(y,x)}

В Scal REPL:

scala> x.groupBy(identity).mapValues(_.size).toList.map{case (x,y)=>(y,x)}
res13: List[(Int, Char)] = List((2,b), (3,a), (2,c))

Вышеприведенный список содержит список и соответствующие символы в виде списка кортежей. Так вы действительно можете

Если вы попытаетесь преобразовать это в карту:

scala> x.groupBy(identity).mapValues(_.size).toList.map{case (x,y)=>(y,x)}.toMap
res14: scala.collection.immutable.Map[Int,Char] = Map(2 -> c, 3 -> a)

Так что это не то, что вы хотите явно.

Еще более сжато использовать:

x.distinct.map(v=>(x.filter(_==v).size,v))

scala> x.distinct.map(v=>(x.filter(_==v).size,v))
res19: scala.collection.immutable.IndexedSeq[(Int, Char)] = Vector((3,a), (2,b), (2,c))
1
задан HB. 19 January 2019 в 10:34
поделиться