2015-05-29 106 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只是其中的一個元素,類型仍然存在。