一、陣列型別 (array)
陣列型別,在語義上表示一組相同型別的集合。這個跟列表(list)相似,兩者的區別在於列表型別資料元素不可變,而陣列型別可以。雖然陣列型別隨機訪問,在查詢訪問上效能優先列表,但列表在變更集合(增加、刪除集合元素)上有更好的效能。這個跟大多數語言是相似的。
定義陣列型別的語法,跟列表也很相似,區別在於陣列多了兩個"|"符合。
letarr=[|1
;2;3
|]letjaggedarr=[|[
|1;2
|];[|
3;4;
5|]|
] arr為一維陣列,型別為int array。jaggedarr陣列為int array array
f#陣列與c#很相似,有兩種類別的陣列,一種叫矩形(rectangle)陣列,另一種叫鋸齒(jagged)陣列
矩形陣列,在數字意義上,就是矩陣(matrix),一維陣列也叫向量或向量(vector)。注意鋸齒陣列內嵌的陣列長度不相等。
在f#中共定義了三個模組來處理陣列型別。array,array2,array3,分別用來處理一維、二維、三維陣列。
#light
leta=array2.create
1020
0array2.iteri (
funi j item
->
printfn
"no %d,%d :%a
"i j item) a
system.console.readkey(
true) |
>ignore
a型別為int [,],是乙個二維陣列。
leta=array2.create
1020
0a.[5,
5]<-
8array2.iteri (
funi j item
->
printfn
"no %d,%d :%a
"i j item) a
letarr=[|1
;3;4
|]printfn "%a
"arr.[0..
2]letc=[|[
|1;2
|];[|
3;4;
5|]|
]printfn "%d
"(c.[
1].[2])
從上面的**可以看出,f#除支援與c#類似的訪問方法外,還對一維陣列支援範圍區間訪問語法。
二、可變陣列型別(resizearray)
resizearray型別,只是.net 型別 system.collections.generic.list泛型型別的別名。resizearray長度可變,資料元素可變,很顯然這個型別難以保證執行緒安全,應優先使用f#的list型別。
letb=
newresizearray<_>()
b.addrange(seq)
b.[5
]<-
8b.foreach((
funi
->
printfn "%d
"i))
三、鍵值對型別map。
map型別,不同於.net的system.collections.generic.dictionary型別,map型別是不可變型別。
letm=map.add 1"
1"map.empty
forv
inm
doprintfn "%a
"vletn=map.of_list [
forkey in1
..100
doyield key,key.tostring()]n |
>map.iter (
funkey value
->
printfn
"%d %s
"key value)
上面的**可以看出map.add函式建立map型別比較麻煩,通過of_list,of_array,of_seq等函式建立字典比較方便。
四、set型別
set型別,不同於list之處,在於集合中資料是唯一的,不存在兩條相等的資料成員。
set.of_list ["1
";"2
";"1
"] |>set.iter (
funitem
->
printfn "%s
"item)
//1 2
set型別,還支援兩個set型別的相交、合併,取子集合等操作
set.of_seq (
seq )
- set.of_list [1;
3;6]
|> set.iter (
funitem
->
printfn "%d
"item)
//2;4;5;7;8;9;10
集合在日常程式設計中佔據了重要了位置,本文對f#集合型別的技術細節沒有進行討論。
接下來,我就集中研究函式式程式設計中一些高階特性,例如組合子,cps,monad。希望條件成熟,我另開乙個系列來討論。
7 集合概述
陣列 儲存同一種型別資料的容器 陣列的特點 1 只能儲存同一種型別的資料 2.一旦初始化,長度固定 3 陣列中元素之間的位址是連續的。注意 object 陣列可以儲存任意型別的元素。object 是物件始祖。集合 儲存物件資料的集合容器。容器 好好的理解 容器,這種說法還是比較形象的 集合比陣列的有...
python的學習之路(2) 集合
序言 這一篇主要講集合 集合是無序的且不重複的元素序列 我們可以使用或者set 函式建立集合 但是當建立空集合時必須使用set 因為直接使用 是表示建立乙個空字典。示例 使用 fruits 或者set set fruit 得到如下 fruits。add x 將元素x 將元素x新增到集合fruits中...
Python學習之路day3 集合
集合 set 是一種無序且不重複的序列。無序不重複的特點決定它存在以下的應用場景 差集 並集 交集等,下文詳述。建立集合的方法與建立字典類似,但沒有鍵值對的概念,具體如下 s1 還可以通過以下兩種方法建立 s2 set s3 set 11,22,33 這兩種方法本質上是同一種,都是通過呼叫系統的se...