Ответ 1
Разница в том, что 'a[][]
представляет массив массивов (возможно, разных длин), а в 'a[,]
- прямоугольный 2D-массив. Первый тип также называется зубчатыми массивами, а второй тип называется многомерными массивами. Разница такая же, как и в С#, поэтому вы можете посмотреть документацию на С# для зубчатых массивов и многомерные массивы. Существует также отличная документация в F # WikiBook.
Чтобы продемонстрировать это с помощью изображения, значение типа 'a[][]
может выглядеть следующим образом:
0 1 2 3 4
5 6
7 8 9 0 1
Пока значение типа a[,]
всегда будет прямоугольником и может выглядеть следующим образом:
0 1 2 3
4 5 6 7
8 9 0 1
Чтобы получить одну "линию" многомерного массива, вы можете использовать нотацию среза:
let array1d = array2d.[0..0,0..9];;
Ссылки фактически возвращают многомерный массив (в этом случае с одним измерением равным 1), поэтому вы можете написать функцию преобразования, которая возвращает 'a[]
следующим образом:
let toArray (arr:_[,]) =
Array.init arr.Length (fun i -> arr.[0, i])
let array1d = array2d.[0..0,0..9] |> toArray;;