我正在关注list
scala
val x : List[List[Int]] = List(List(1,2,3,4,5), List(6,7,8,9,10))
x match {
case x::xs => {
println ("First Part => " + x)
println ("Second Part => " + xs)
}
}
此输出
First Part => List(1, 2, 3, 4, 5)
Second Part => List(List(6, 7, 8, 9, 10))
为什么第二部分不仅是List(6, 7, 8, 9, 10)
,为什么是list of list
答案 0 :(得分:6)
因为模式x :: xs
将原始输入列表List(List(1,2,3,4,5), List(6,7,8,9,10))
拆分为列表的头部和尾部。
列表的头部是列表中的第一个元素。在这种情况下List(1,2,3,4,5)
。
列表的尾部是原始列表,第一个元素除外。所以它是除第一个元素之外的所有元素的列表。在这种情况下,头部后面只有一个元素,即List(6,7,8,9,10)
。尾部是包含此元素的列表,因此尾部为List(List(6,7,8,9,10))
。
如果要将列表与两个元素匹配,可以执行以下操作:
case x1 :: x2 :: Nil => {
println ("First Part => " + x1)
println ("Second Part => " + x2)
}
请注意,这只会将输入列表与两个元素匹配。
答案 1 :(得分:1)
case x::xs
与head::tail
根据定义,head是单个元素,而tail将是序列的其余部分。由于您的元素是列表,因此head是List
,而tail仍然是List
的列表 - 即使您的原始列表x
仅包含两个元素,因此剩下的tail
}只是一个元素,类型仍然存在。