Scala - 模式匹配中的自动迭代器

时间:2016-08-17 08:13:34

标签: scala

我有这样的数组数据:[("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
}

任何想法?提前谢谢

3 个答案:

答案 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(",") )

其中mkStringxs创建一个字符串,并用逗号分隔每个项目。

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