我有这样的数组数据:[("Bob",5),("Andy",10),("Jim",7),...(x,y)]
。
如何在Scala中进行模式匹配?所以他们会根据我提供的数组数据自动匹配(而不是逐个定义“案例”)
我的意思是不喜欢这个,伪代码:
val x = y.match {
case "Bob" => get and print Bob's Score
case "Andy" => get and print Andy's Score
..
}
但
val x = y.match {
case automatically defined by given Array => print each'score
}
任何想法?提前谢谢
答案 0 :(得分:0)
考虑
val xs = Array( ("Bob",5),("Andy",10),("Jim",7) )
for ( (name,n) <- xs ) println(s"$name scores $n")
以及
xs.foreach { t => println(s"{t._1} scores ${t._2}") }
xs.foreach { t => println(t._1 + " scores " + t._2) }
xs.foreach(println)
打印xs
,
println( xs.mkString(",") )
其中mkString
从xs
创建一个字符串,并用逗号分隔每个项目。
Miscellany notes
要说明Scala Array
上的模式匹配,请考虑
val x = xs match {
case Array( t @ ("Bob", _), _*) => println("xs starts with " + t._1)
case Array() => println("xs is empty")
case _ => println("xs does not start with Bob")
}
在第一种情况下,我们提取第一个元组,而忽略其余的元组。在第一个元组中,我们匹配字符串"Bob"
并忽略第二个项目。此外,我们将第一个元组绑定到标记t
,该标记用于我们引用其第一个项目的打印中。
第二种情况意味着其他所有未涵盖的案例。
答案 1 :(得分:0)
如果打印和存储阵列中的结果是您主要关注的问题,那么以下情况将会很好:
val ls = Array(("Bob",5),("Andy",10),("Jim",7))
ls.map({case (x,y) => println(y); y}) // print and store the score in an array
答案 2 :(得分:0)
对这个问题有点困惑,但是如果你只想打印数组中的所有数据,我会这样做:
val list = Array(("Foo",3),("Tom",3))
list.foreach{
case (name,score) =>
println(s"$name scored $score")
}
//output:
//Foo scored 3
//Tom scored 3