2009-03-15 15 views
4

私はまだ関数型プログラミングに新しいので、何かを行う方法がわからない場合は手続き型スタイルに戻します。私はリストに変換する必要が回避する方法を見つけたが、私はまだ方法を知りたいと思います。F#Array2をリストに変換する

2次元配列をリストに変換しようとしました。

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

.NETのArray2はどこですか?それがあなたの機能ならば、あなたはソースを提供することができますか?ありがとう – gatoatigrado

+0

私はそれがArray2Dに改名されたと信じています。 F#ランタイムにあります。 http://msdn.microsoft.com/en-us/library/ee353794.aspx – gradbot

答えて

7

は明らか.NETで、多次元配列は、(非ジェネリック)のIEnumerableであるため、これが動作します。

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:Noldorinコメントで指摘したように、これはより良いです:

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

良い解決策...私はわずかに複雑なので、私は今削除しました。しかし、私は、2行目を簡略化して、次のように指摘することもできます。let l = a2 |> Seq.cast |> Seq.to_list – Noldorin

+0

IEnumerableでできることがありましたが、それを行う方法を知っている。 – gradbot

+0

'Seq.toList'は' Seq.to_list'ではありません。(SOはこう言っているので編集できません: '編集は6文字以上でなければなりません。 – Michelrandahl