5

如何专门定义特定类型 T 的新数组?

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

我想写这样的东西:

let arr = new Array()

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

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

4

4 回答 4

4

也许Array.init<'T>andArray.create<'T>函数是您正在寻找的。

还可以考虑使用 aSequence而不是数组。

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

于 2012-06-15T11:11:17.523 回答
4

如果元素的类型未知,您可以使用显式类型注释:

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)
于 2012-06-15T11:14:20.030 回答
2

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

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

它在msdn上进行了描述。

于 2012-06-15T11:10:50.847 回答
2

自动泛化和类型推断是您应该利用的重要功能。

创建数组时:

let arr = Array.zeroCreate 10

它的类型是广义的。在这种情况下,它被推断为'T[](尽可能一般)。

一旦你做了类似的事情:

let x = arr.[0] + 1

或者

printfn "%s" arr.[0]

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

缺少显式类型使您的代码更加简洁。保存类型注释以供真正需要时使用。

于 2012-06-15T15:49:19.887 回答