[英]Array initialization in F#
如何根據給定的記錄類型在F#中創建和初始化數組? 假設我想創建一個包含100條記錄1的數組。
例如
type record1 = { value1:string; value2:string } let myArray = Array.init 100 ?
但似乎Array.init不允許這樣做,有沒有辦法做到這一點?
編輯添加:
當然我可以這樣做:
let myArray = [|for i in 0..99 -> { value1="x"; value2="y" }|]
這應該做你需要的。 希望能幫助到你。
type record1 = {
value1:string;
value2:string
}
let myArray = Array.init 100 (fun x -> {value1 = "x"; value2 = "y"})
或使用泛型
let myArray = Array.init<record1> 100 (fun x -> {value1 = "x"; value2 = "y"})
您還可以使用Array.create
,它創建一個給定大小的數組,並將其所有元素初始化為定義的值:
let myArray = Array.create 100 {value1="x"; value2="y"}
看一下這個數組操作列表。
或者您可以創建一個序列,而不是創建一個數組,如下所示:
// nItems, given n and an item, returns a sequence of item repeated n times
let rec nItems n item =
seq {
match n with
| n when n > 0 -> yield item; yield! nItems (n - 1) item
| _ -> ()
}
type Fnord =
{ foo: int }
printfn "%A" (nItems 99999999 {foo = 3})
// seq [{foo = 3;}; {foo = 3;}; {foo = 3;}; {foo = 3;}; ...]
printfn "%A" (nItems 3 3 |> Seq.toArray)
[|3; 3; 3|]
關於序列而不是數組的好處是它可以根據需要創建項目,而不是一次創建項目。 如果需要,在序列和數組之間來回移動很簡單。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.