2015-05-29 57 views
2
匹配的列表清单

我得到的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

回答

6

因为模式​​分割原始输入列表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

case x::xshead::tail

根据定义匹配,头是一个单独的元件,而尾巴将是该序列的其余部分。由于你的元素列表,头是List和尾部仍然是List名单 - 即使你原来的列表,x只包含两个元素,因此剩下的tail只是其中的一个元素,类型仍然存在。