Scala对我来说是新手,所以我不确定最好的方法。
我需要简单地将字符串放在一个列表中并加入它们。
因此,concat(List("a","b","c"))
会返回abc
。
我应该先看看列表中有多少个字符串,这样我可以循环并加入它们吗?我觉得首先需要这样做,这样你可以像使用数组一样使用列表并list[1]
追加list[2]
追加list[3]
等等。
修改:
这是我的想法,当然还有编译错误..
def concat(l: List[String]): String = {
var len = l.length
var i = 0
while (i < len) {
val result = result :: l(i) + " "
}
result
}
答案 0 :(得分:30)
在REPL
上如何做到这一点List("a","b","c") mkString("")
或在脚本文件
中List("a","b","c").mkString("")
答案 1 :(得分:2)
为您探索的一些选项:
鉴于问题的基本水平,我认为你正在研究在编程中学习一些基础知识。如果选择的语言是Scala,可能重点是函数式编程,所以我会努力解决#2,然后解决#1。额外学分#3。
答案 2 :(得分:1)
本练习旨在鼓励您从功能角度思考问题。您有一组要移动的数据,执行一组相同的操作。您已经确定了命令式循环结构(for
)。很简单。现在,您如何将其构建为功能构造,而不是依赖于“有状态”循环?
答案 3 :(得分:0)
在函数式编程中,fold ...是一个高阶族 在数据结构中迭代任意函数的函数 一些订单并建立一个返回值。
http://en.wikipedia.org/wiki/Fold_%28higher-order_function%29
这听起来像你可以使用的东西。
由于字符串连接是关联的(确切地说,它形成一个将空字符串作为中性元素的幺半群),折叠的“方向”无关紧要(至少如果你没有受到性能的影响)。
说到性能:在现实生活中,使用StringBuilder
作为中间步骤是个好主意,但如果你想使用它,这取决于你。
答案 4 :(得分:0)
我只是在这里假设你不仅是Scala的新手,而且还是一般的编程新手。我不是说SO不是为新手制作的,但我相信还有很多其他的地方,更适合你的需要。例如书籍......
我还假设您的问题不必以功能性,命令式或其他方式解决。它只需要作为家庭作业来解决。
以下是您应该考虑/问自己的事项列表:
答案 5 :(得分:0)
比mkString长一点但效率更高:
s.foldLeft(new StringBuilder())(_ append _)。toString()