2011年9月21日 星期三

F# Lists -1

記得Tuple是用小(圓)括號嗎? F#的List則是用中(角)括號。

> let list123 = [1;2;3];;
val list123 : int list = [1; 2; 3]

可以看到list123是一個 int list的型別, 內容是1; 2; 3, 也可以知道list裡的分隔是用";"來代表的, 和tuple不同, tuple是用","來做為分隔, 這一點很重要, 避免誤用。

 

let list123 = [
    1
    2
    3 ];;

上面的例子也說明了, 如果是用換行來做為分隔的話, 則不用分號了, tuple也是一樣的。但是為了減少行數, 在可以理解的長度內, 還是建議使用少一點的行數就行了…

另外在初始化list的過程中, 也可以使用一些特別的方法:

let listOfSquares = [ for i in 1 .. 10 -> i*i ];;

這樣一來, 內容就是1~10的平方數了。

對於list的操作, 可以想像一下原有在程式裡我們最想抓取的應該是頭尾, 以及插入一筆資料的操作, 因為和array不同的是 (array還沒有學到), list是可以隨時在中間插入或是刪除的。

我們假設有一個list1是[2; 3; 4], 以及我們想在最前面加入一個100的數字, 於是我們可以這麼表達。

let list2 = 100 :: list1;;

另外我們也可以將兩個list做連結。

let list3 = list1 @ list2;;

list本身其實是一個類別, 有自己的property, 在MSDN上面可以找到有這些可以使用:

let list1 = [ 1; 2; 3 ]

// Properties
printfn "list1.IsEmpty is %b" (list1.IsEmpty);;
printfn "list1.Length is %d" (list1.Length);;
printfn "list1.Head is %d" (list1.Head);;
printfn "list1.Tail.Head is %d" (list1.Tail.Head);;
printfn "list1.Tail.Tail.Head is %d" (list1.Tail.Tail.Head);;
printfn "list1.Item(1) is %d" (list1.Item(1));;

沒有留言: