格局斯卡拉
问题描述:
匹配的列表清单
我得到的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)
}
}
此输出以下以下list
以下
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
答
因为模式分割原始输入列表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)
}
注意,这将只匹配正好用两个元素的输入列表。
答
case x::xs
为head::tail
根据定义匹配,头是一个单独的元件,而尾巴将是该序列的其余部分。由于你的元素列表,头是List
和尾部仍然是List
名单 - 即使你原来的列表,x
只包含两个元素,因此剩下的tail
只是其中的一个元素,类型仍然存在。