如何根据a string
中应用的foreach
或for
语句的返回值构建List
(不打印)?
比方说,我有这个:
val names = List("Bob", "Fred", "Joe", "Julia", "Kim")
val x: String = for (name <- names) name //I don't need this println(name)
这些name
返回的字符串我试图放入String
,用space
连接它们。?!
答案 0 :(得分:4)
val names = List("Bob", "Fred", "Joe", "Julia", "Kim")
val x = names.mkString(" ") // "Bob Fred Joe Julia Kim"
答案 1 :(得分:2)
for
和foreach
返回Unit
。它们仅用于印刷等副作用。吉恩说,mkString
是你最好的选择。还有第二个版本可以传递开始和结束字符串,例如,
scala> names.mkString("[", ", ", "]")
res0: String = [Bob, Fred, Joe, Julia, Kim]
如果您需要更多灵活性,reduceLeft
可能就是您想要的。以下是mkString
正在做的事情,或多或少:
"[" + names.reduceLeft((str, name) => str + ", " + name) + "]"
reduceLeft
抛出空容器的异常,而mkString
只返回“”。 foldLeft
适用于空集合,但是使分隔符正确是很棘手的。