本文鏈接: 在第一篇中,我們介紹了一些基礎數據類型,其實那篇標題中不應該含有“F ”字眼,因為並不是特有的。 在本篇中,我們介紹如數組這些集合類型以及部分F 特有的類型。 在第一篇里我們列了一個從0加到100的代碼段,瞭解函數式編程的同學會說那個F 代碼不正宗。 而現在的C 開發一般也會使用Linq ...
本文鏈接:http://www.cnblogs.com/hjklin/p/fs-for-cs-dev-3.html
在第一篇中,我們介紹了一些基礎數據類型,其實那篇標題中不應該含有“F#”字眼,因為並不是特有的。
在本篇中,我們介紹如數組這些集合類型以及部分F#特有的類型。
在第一篇里我們列了一個從0加到100的代碼段,瞭解函數式編程的同學會說那個F#代碼不正宗。
而現在的C#開發一般也會使用Linq的方式來代替迴圈,其實F#天生就是使用這種方式的,下麵我們先介紹F#的集合類型,在之後會介紹相關集合的函數操作。
集合類型
列表:List
聲明List
註意,F#中的List不是C#中常用的System.Collections.Generic.List<T>
,雖然後者你也可以在F#里使用。
F#中的List是有序,不可變的,且每一項的類型必須一致。我們先看看怎麼定義列表。以下代碼以>
開頭的為輸入,之後的一行則為輸出結果。
> let charList = ['a';'o';'e';'i';'u';'ü'];;
val charList : char list = ['a'; 'o'; 'e'; 'i'; 'u'; 'ü']
> let emptyList = [];;
val emptyList : 'a list
> let emptyList2 = List.empty;;
val emptyList : 'a list
使用[]
聲明和List.empty均可聲明空列表,空列表類型為'a list
表示可接收任意類型,但當你添加一個元素後,列表類型但確定了,無法添加其它類型的元素。
和C#不一樣,F#在集合中使用分號(;
)分隔各個項。但當列表很大時,使用這樣的聲明方式就變得很麻煩了。
這時,可以使用下麵的範圍(Range)聲明方式來聲明:
> let intList = [1..10];;
val intList : int list = [1; 2; 3; 4; 5; 6; 7; 8; 9; 10]
> let tens = [0 .. 10 .. 100];;
val tens : int list = [0; 10; 20; 30; 40; 50; 60; 70; 80; 90; 100]
> let countDown = [5L .. -1L .. 0L];;
val countDown : int64 list = [5L; 4L; 3L; 2L; 1L; 0L]
範圍聲明方式中,中間項為間隔(若無則間隔為1),並包含起始項到結束項。熟悉Python的小伙伴要註意。