Scala - 在列表中使用for()或foreach()的返回值

时间:2014-11-28 14:21:41

标签: scala loops

如何根据a string中应用的foreachfor语句的返回值构建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连接它们。?!

2 个答案:

答案 0 :(得分:4)

使用mkString(sep: String)功能:

val names = List("Bob", "Fred", "Joe", "Julia", "Kim")
val x = names.mkString(" ")      // "Bob Fred Joe Julia Kim"

答案 1 :(得分:2)

forforeach返回Unit。它们仅用于印刷等副作用。吉恩说,mkString是你最好的选择。还有第二个版本可以传递开始和结束字符串,例如,

scala> names.mkString("[", ", ", "]") res0: String = [Bob, Fred, Joe, Julia, Kim]

如果您需要更多灵活性,reduceLeft可能就是您想要的。以下是mkString正在做的事情,或多或少:

"[" + names.reduceLeft((str, name) => str + ", " + name) + "]"

但是,有一点不同。 reduceLeft抛出空容器的异常,而mkString只返回“”。 foldLeft适用于空集合,但是使分隔符正确是很棘手的。

相关问题