我正在Scala上制作密码战kata。我仍然是该语言的入门者,并且我正在尝试以功能性编程的方式来做事情,这对我来说也是一种误解。
该任务的想法很简单,它们为您提供了一个字符串,您需要输出一个包含字符和在列表中的次数的列表。应该很容易:
Kata.orderedCount(“ abracadabra”)== List(('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)
答案 0 :(得分:1)
在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
再次,也许有更好的方法。