Scala将参数拆分为几行并解析为Int

Scala将参数拆分为几行并解析为Int,scala,idioms,Scala,Idioms,这可能会非常简单,但我要求更多帮助我学习更好的Scala习惯用法(Python guy by trade希望学习一些Scala技巧) 我正在做一些黑客排名的问题,输入的方法需要从stdin读取行。规范引用如下: 第一行包含测试用例的数量 跟着。每种情况包含两个整数N和M 因此,传入脚本的输入如下所示: 4 2 2 3 2 2 3 4 4 我想知道怎样做才是正确的、惯用的方法。我想到了一些: 使用io.Source.stdin.readLines.zipWithIndex,然后从foreach

这可能会非常简单,但我要求更多帮助我学习更好的Scala习惯用法(Python guy by trade希望学习一些Scala技巧)

我正在做一些黑客排名的问题,输入的方法需要从stdin读取行。规范引用如下:

第一行包含测试用例的数量 跟着。每种情况包含两个整数N和M

因此,传入脚本的输入如下所示:

4
2 2
3 2
2 3
4 4
我想知道怎样做才是正确的、惯用的方法。我想到了一些:

  • 使用
    io.Source.stdin.readLines.zipWithIndex
    ,然后从foreach中,如果索引大于0,则在空白处拆分并映射到
    (\uu.toInt)
  • 使用相同的
    readLines
    函数获取输入,然后根据索引进行模式匹配
  • 在空格和换行符上拆分以生成单个数字列表,将
    映射到int
    ,弹出第一个元素(问题大小),然后模2以生成我的问题函数的参数元组

我想知道,Scala程序员会有什么样的经验来考虑解析这些ARG的最佳方法,其中2行元素是一个函数的ARG,第一个单数字行只是要解决的问题的数量。

< P>也许你在寻找类似的东西?

def f(x: Int, y: Int) = { f"do something with $x and $y" }

io.Source.stdin.readLines
  .map(_.trim.split("\\s+").map(_.toInt))    // split and convert to ints
  .collect { case Array(a, b) => f(a, b) }   // pass to f if there are two arguments
  .foreach(println)                          // print the result of each function call

另一种读取黑客等级问题输入的方法是使用
scala.io.Stdin

import scala.io.StdIn
import scala.collection.mutable.ArrayBuffer

object Solution {
  def main(args: Array[String]) = {
    val q = StdIn.readInt
    var lines = ArrayBuffer[Array[Int]]()
    (1 to q).foreach(_ => lines += StdIn.readLine.split(" ").map(_.toInt))
    for (a <- lines){
      val n = a(0)
      val m = a(1)
      val ans = n * m
      println(ans)
    }
  }
}
4
6
6
16