2012-06-15 43 views
1

特定類型的新陣列如何可以具體地定義特定類型T的新的數組?限定於F#

奇怪的是,我無法找到任何關於它的有用的信息..

我想寫的東西是這樣的:

let arr = new Array() 

只是改編的元素必須是T類型

如何在F#上執行此操作?

+3

你說你找不到關於它的信息;下一次,從MSDN文檔開始:http://msdn.microsoft.com/en-us/library/dd233181語言參考有一個名爲'數組'的子主題,這將有助於:) – Brian

回答

2

也許Array.init<'T>Array.create<'T>功能是你在找什麼。

還要考慮使用一個Sequence代替陣列。

序列是一個邏輯一系列元素的所有一種類型的的。如果您有大量有序的數據集合,但不一定期望使用所有元素,則序列特別有用。

2

或許你可以嘗試這樣的事情。

let myStringArray : string array = Array.zeroCreate 10 
let myIntArray : int array = Array.zeroCreate 10 
let myCharArray : char array = Array.zeroCreate 10 

它被描述在msdn上。

3

如果元素的類型是未知的,你可以使用顯式類型註解:

let arrayOfTenZeroes = Array.zeroCreate<int> 10  
let emptyIntArray: int array = [||] 

當您使用高階函數從Array module,你沒有這樣做,因爲元素的類型由類型檢查器自動推斷:

// arr is inferred as int array 
let arr = Array.init 10 (fun i -> i+1) 
2

Automatic generalization和類型推斷是你應該利用的很棒的功能。

當創建一個數組:

let arr = Array.zeroCreate 10 

其類型是廣義。在這種情況下,推斷爲'T[](儘可能一般)。

一旦你做這樣的事情:

let x = arr.[0] + 1 

printfn "%s" arr.[0] 

它可以推斷出具體類型(int[]string[],分別)。

缺乏明確的類型,使你的代碼乾淨多了。將類型註釋保存爲真正需要的時間。