F # передать многомерный массив bool в функцию - PullRequest
2 голосов
/ 11 апреля 2011

Как я могу передать многомерный массив bools функции в F #?

Спасибо Maybettle

1 Ответ

5 голосов
/ 11 апреля 2011

Существует два варианта в зависимости от того, используете ли вы фактический 2D-массив (прямоугольный массив) или зубчатый массив (массив, элементы которого являются массивами, возможно различной длины):

Если вы не уверены, какой из них использовать, то полезно знать, что зубчатые массивы быстрее, но может быть проще работать с прямоугольными массивами (потому что вы уверены в размерах).

let foo (ar:bool[,]) = ar.[0, 0]   // Get element at specified coordinates
let bar (ar:bool[][]) = ar.[0].[0] // Get first array and then the element 

Для вызова двух функций вы можете использовать следующий синтаксис:

// Create array of arrays and call the function
bar [| [| true |] |]

// Creates array of arrays and converts it to multi-dimensional array
// You can also use plenty of functions from 'Array2D' module
foo (array2D [| [| true |] |])

Если вы хотите написать функцию, которая будет более общей, вы также можете использовать последовательность последовательностей. Это будет совместимо только с зубчатыми массивами, но вы также можете использовать эту функцию, например, с. F # списки списков или любые типы коллекций .NET.

let woo (ar:seq<#seq<bool>>) = Seq.head (Seq.head ar)

Тип #seq<..> означает, что это может быть последовательность или любой другой производный тип. Это необходимо для типа элемента, но не для внешнего типа, потому что F # автоматически приводит внешний тип (но не элементы).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...