Scala将参数拆分为几行并解析为Int
这可能会非常简单,但我要求更多帮助我学习更好的Scala习惯用法(Python guy by trade希望学习一些Scala技巧) 我正在做一些黑客排名的问题,输入的方法需要从stdin读取行。规范引用如下: 第一行包含测试用例的数量 跟着。每种情况包含两个整数N和M 因此,传入脚本的输入如下所示: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
4
2 2
3 2
2 3
4 4
我想知道怎样做才是正确的、惯用的方法。我想到了一些:
- 使用
,然后从foreach中,如果索引大于0,则在空白处拆分并映射到io.Source.stdin.readLines.zipWithIndex
(\uu.toInt)
- 使用相同的
函数获取输入,然后根据索引进行模式匹配readLines
- 在空格和换行符上拆分以生成单个数字列表,将
,弹出第一个元素(问题大小),然后模2以生成我的问题函数的参数元组映射到int
我想知道,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