Inicializace Array v F #

hlasů
6

Jak mohu vytvořit a inicializovat pole v F # založenou na daném typu záznamu? Dejme tomu, že chci vytvořit Array 100 trestů1 záznamů.

např

Typ trestů1 = {
  hodnota1: string;
  value2: string
}

ať myArray = Array.init 100?

Ale Zdá se, že Array.init neumožňuje to, existuje způsob, jak to udělat?

Změněné přidat:

Samozřejmě, že jsem mohl udělat něco takového:

ať myArray = [| for i in 0..99 -> {hodnota1 = x; value2 = y} |]
Položena 12/07/2009 v 05:00
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
11

Můžete také použít Array.create, která vytvoří pole dané velikosti, se všemi svými prvky inicializuje na definovanou hodnotu:

let myArray  = Array.create 100 {value1="x"; value2="y"}

Dát se podívat na tento seznam operací pole .

Odpovězeno 12/07/2009 v 06:10
zdroj uživatelem

hlasů
11

To by mělo dělat to, co budete potřebovat. Doufám, že to pomůže.

type record1 = {
  value1:string;
  value2:string
}

let myArray  = Array.init 100 (fun x -> {value1 = "x"; value2 = "y"})

nebo s použitím Generics

let myArray  = Array.init<record1> 100 (fun x -> {value1 = "x"; value2 = "y"})
Odpovězeno 12/07/2009 v 05:40
zdroj uživatelem

hlasů
2

Nebo si můžete vytvořit sekvence, namísto vytváření seskupení, jako je tento:

// 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|]

Krásná věc na tom pořadí, namísto pole, je to, že vytváří položky, jak je budete potřebovat, spíše než všichni najednou. A je to jednoduché jít tam a zpět mezi sekvencemi a pole, pokud budete potřebovat.

Odpovězeno 26/11/2009 v 01:40
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more