use*_*754 2 functional-programming scala
我是Scala和函数式编程的新手.
我正在解决问题,你必须读取数字,然后是那个整数.之后,您应该计算所有整数中所有数字的总和.
这是我的代码
def sumDigits(line: String) =
line.foldLeft(0)(_ + _.toInt - '0'.toInt)
def main(args: Array[String]) {
val numberOfLines = Console.readInt
val lines = for (i <- 1 to numberOfLines) yield Console.readLine
println(lines.foldLeft(0)( _ + sumDigits(_)))
}
Run Code Online (Sandbox Code Playgroud)
有更优雅或有效的方式吗?
sumDigits()可以更容易实现sum:
def sumDigits(line: String) = line.map(_.asDigit).sum
Run Code Online (Sandbox Code Playgroud)
第二个foldLeft()也可以替换为sum:
lines.map(sumDigits).sum
Run Code Online (Sandbox Code Playgroud)
这将我们带到最终版本(注意没有main,而是带有扩展App):
object Main extends App {
def sumDigits(line: String) = line.map(_.asDigit).sum
val lines = for (_ <- 1 to Console.readInt) yield Console.readLine
println(lines.map(sumDigits).sum)
}
Run Code Online (Sandbox Code Playgroud)
或者,如果你真的想在一行中尽可能地挤压内联sumDigits(不推荐):
lines.map(_.map(_.asDigit).sum).sum
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
408 次 |
| 最近记录: |