F # конвертировать Array2 в список - PullRequest
4 голосов
/ 15 марта 2009

Я все еще новичок в функциональном программировании, поэтому, если я не могу понять, как что-то сделать, я возвращаюсь к процедурному стилю. Я нашел способ обойти необходимость преобразования в список, но я все еще хотел бы знать, как.

Вот моя попытка преобразовать двумерный массив в список.

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))

1 Ответ

8 голосов
/ 15 марта 2009

Очевидно, что в .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

РЕДАКТИРОВАТЬ: Как Нолдорин указывает в комментарии, это даже лучше:

let l = a2 |> Seq.cast<int> |> Seq.toList
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...