Scala找到更优雅的方式

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)

有更优雅或有效的方式吗?

Tom*_*icz 6

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)