簡體   English   中英

F#中的數組初始化

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM