在F#上定义特定类型的新数组

时间:2012-06-15 11:02:48

标签: arrays f#

如何具体定义特定类型T的新数组?

奇怪的是,我找不到任何有用的信息..

我想写这样的东西:

let arr = new Array()

只有arr的元素必须是T类型。

我怎样才能在F#上做到?

4 个答案:

答案 0 :(得分: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)

答案 1 :(得分:2)

也许你可以尝试这样的事情。

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

msdn上进行了描述。

答案 2 :(得分:2)

也许Array.init<'T>Array.create<'T>功能正是您所需要的。

另请考虑使用Sequence而不是数组。

  

序列是所有一种类型的逻辑系列元素。当您拥有大量有序的数据集但不一定希望使用所有元素时,序列特别有用。

答案 3 :(得分:2)

Automatic generalization和类型推断是您应该利用的强大功能。

创建数组时:

let arr = Array.zeroCreate 10

其类型为广义。在这种情况下,它被推断为'T[](尽可能通用)。

一旦你做了类似的事情:

let x = arr.[0] + 1

printfn "%s" arr.[0]

它可以分别推断具体类型(int[]string[])。

缺少显式类型使您的代码更清晰。保存类型注释以确定它们何时真正需要。