2009-03-15 14 views
4

Ich bin immer noch neu in der funktionalen Programmierung, also wenn ich nicht herausfinden kann, wie ich etwas tun soll, gehe ich zurück zum prozeduralen Stil. Ich habe einen Weg gefunden, um zu einer Liste zu konvertieren, aber ich würde trotzdem gerne wissen wie.F # konvertieren Array2 in eine Liste

Hier ist mein Versuch, ein zweidimensionales Array in eine Liste zu konvertieren.

let board = Array2.init 10 20 (fun i j -> pull(i, j)) 

let mutable pieces = [] 

board 
|> Array2.mapi (fun i j a -> transform(i, j, a)) 
|> Array2.iter (fun a -> (pieces <- a :: pieces)) 
+0

wo ist Array2 in .NET? Wenn es Ihre Funktion ist, könnten Sie Quelle zur Verfügung stellen? Danke – gatoatigrado

+0

Ich glaube, es wurde in Array2D umbenannt. Es ist in der F # -Laufzeit. http://msdn.microsoft.com/en-us/library/ee353794.aspx – gradbot

Antwort

7

Offenbar in .Net, sind mehrdimensionale Arrays IEnumerable (non-generic) und damit dies funktioniert:

let a2 = Array2.init 2 3 (fun x y -> (x+1)*(y+1)) 
let l = a2 |> Seq.cast<int> |> Seq.fold (fun l n -> n :: l) [] 
printfn "%A" l 

EDIT: Wie Noldorin in einem Kommentar weist darauf hin, das ist noch besser :

let l = a2 |> Seq.cast<int> |> Seq.toList 
+0

Gute Lösung ... Ich habe gerade meine gelöscht, wie es etwas komplizierter ist. Allerdings kann ich auch darauf hinweisen, dass die zweite Zeile vereinfacht werden kann: l 'l = a2 |> Seq.cast |> Seq.to_list – Noldorin

+0

Awesome Dank, ich dachte, es gab etwas, was ich mit IEnumerable tun konnte, aber ich tat es nicht weiß, wie es geht. – gradbot

+0

seine 'Seq.toList' nicht' Seq.to_list' .. (kann nicht bearbeitet werden, weil SO sagt: 'Edits müssen mindestens 6 Zeichen' sein, vielen Dank SO ..: /) – Michelrandahl

Verwandte Themen