以下代码的输出结果为( )。 def main(args: Array[String]): Unit = { val list1 = List(15) val list2 = List(23, 10, 45, 56, 16) def patternSeq(x: Any) = x match { case List(x1,x2,x3)=> println(s"x1=$x1,x2=$x2,x3=$x3") case List(first, second, _*) => println(s"first=$first,second=$second") case _ => println("others") } patternSeq(list1) patternSeq(list2) }
时间: 2023-12-12 17:03:35 浏览: 24
代码的输出结果为:
```
others
first=23,second=10
```
这是因为:
1. `patternSeq(list1)` 调用 `patternSeq` 函数,并将 `list1` 作为参数传入。由于 `list1` 中只包含一个元素 15,而第一个模式匹配要求匹配的是长度为 3 的列表,因此第一个模式匹配不匹配,转而匹配第二个模式。
2. 在第二个模式中,由于 `list2` 的前两个元素是 23 和 10,因此 `first` 和 `second` 分别被赋值为 23 和 10,并被打印输出。
3. `list2` 中还有三个元素 45、56 和 16 没有被匹配到,但由于第二个模式使用了 `_*` 通配符,因此不会报错。
4. 最后一个模式是通配符模式,会匹配所有未被前两个模式匹配的输入,因此对于 `list1` 会打印 "others"。
相关问题
object RunList { def main(args: Array[String]): Unit = { val words = List("scala", "is", "good") //使用 /: 输出语句 s1= scala is good val s1 = ("" /: words) (_ + " " + _) println("s1=" + s1) //使用foldLeft 输出语句 s2= scala is good val s2=words.( ? ) println("s2=" + s2) }
可以使用 `foldLeft` 方法来实现和 `/:` 相同的效果,具体可以将代码修改为:
```
object RunList {
def main(args: Array[String]): Unit = {
val words = List("scala", "is", "good")
// 使用 /: 输出语句 s1= scala is good
val s1 = ("" /: words) (_ + " " + _)
println("s1=" + s1)
// 使用 foldLeft 输出语句 s2= scala is good
val s2 = words.foldLeft("") (_ + " " + _)
println("s2=" + s2)
}
}
```
其中 `foldLeft` 的第一个参数是初始值,这里使用空字符串 `""`;第二个参数是一个函数,这里使用 `_ + " " + _` 将列表中的字符串拼接起来。这样就可以得到和 `/:` 相同的输出结果 `s2= scala is good`。
完善如下代码:import org.apache.spark.rdd.RDD import org.apache.spark.sql.{DataFrame,SparkSession} object First_Question { case class Student(name:String,age:String,sex:String) def main(args: Array[String]): Unit = { val spark: SparkSession = SparkSession .builder() .appName("First_Question") .master("local[*]") .getOrCreate() val rdd: RDD[String] = spark.sparkContext.parallelize(List("张三,20,男", "李四,22,男", "李婷,23,女","赵六,21,男")) val temp: RDD[Student] = rdd.map(s => { val split_rdd: Array[String] = s.split(",") Student(split_rdd(0), split_rdd(1), split_rdd(2)) }) import spark.implicits._ // DataFrame 源数据 val dataFrame: DataFrame = temp.toDF() spark.stop() } }
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.{DataFrame, SparkSession}
object First_Question {
case class Student(name: String, age: Int, sex: String)
def main(args: Array[String]): Unit = {
val spark: SparkSession = SparkSession
.builder()
.appName("First_Question")
.master("local[*]")
.getOrCreate()
val rdd: RDD[String] = spark.sparkContext.parallelize(List("张三,20,男", "李四,22,男", "李婷,23,女", "赵六,21,男"))
val temp: RDD[Student] = rdd.map(s => {
val split_rdd: Array[String] = s.split(",")
Student(split_rdd(0), split_rdd(1).toInt, split_rdd(2))
})
import spark.implicits._
// DataFrame 源数据
val dataFrame: DataFrame = temp.toDF()
spark.stop()
}
}