Посчитать появления в строке и вывести список с символом - появления - PullRequest
0 голосов
/ 24 октября 2018

Я делаю ката на Scala.Я все еще начинаю изучать этот язык и пытаюсь сделать что-то функциональным способом программирования, что для меня тоже загадка.

Идея задачи проста, они предоставляют вам строку, и вам нужно вывести список с символами и количеством раз, которое он есть в списке.Это должно быть просто:

Kata.orderedCount ("abracadabra") == Список (('a', 5), ('b', 2), ('r', 2), ('c', 1), (' d ', 1)

И это код, который я пишу. Я также не понимаю, почему я не могу распечатать из цикла list_final, хотя я поставил его каквозврат (объяснение здесь тоже может быть хорошим). Нужно просто найти способ добавить новый список к существующему, но списки в scala неизменны :(. Заранее спасибо

var cuerda = "abracadabra" 
var cuerda2 = cuerda.groupBy(word => word)
var cont:Int = 0
var list288 = List[Any]()
var vector = new Array[Any](cuerda.distinct.size)
cuerda.map(cuerda2).distinct.foreach(e=> {
  println(List(e(0).toString, e.size))
  var list_final = list288 ::: List(e(0).toString, e.size)
  cont+=1
  vector = vector +: Array(e(0), e.size)
  println(list_final)

})
println(list288)

1 Ответ

0 голосов
/ 24 октября 2018

В Scala это немного проще:

val cuerda = "abracadabra"
cuerda.groupBy(identity).map { case (k, v) => k -> v.length }.toList

Возможно, есть еще более простой способ.

Редактировать: И, спасибо, Тим:

cuerda.groupBy(identity).mapValues(_.length).toList

Обновление: Поскольку вы хотите поддерживать порядок, вы можете сделать что-то вроде этого:

val counts = cuerda.groupBy(identity).mapValues(_.length)
cuerda.distinct.map(c => c -> counts(c)).toList

Опять же, может быть лучший способ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...