Scala中列表列表的模式匹配

时间:2015-05-29 07:02:10

标签: scala

我正在关注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

2 个答案:

答案 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::xshead::tail

匹配

根据定义,head是单个元素,而tail将是序列的其余部分。由于您的元素是列表,因此head是List,而tail仍然是List的列表 - 即使您的原始列表x仅包含两个元素,因此剩下的tail }只是一个元素,类型仍然存在。

相关问题