Типы многомерного массива F#

Между чем различие 'a[,,] и 'a[][][]? Они оба представляют 3-и массивы. Это заставляет меня записать array3d.[x].[y].[z] вместо array3d.[x, y, z].

Почему я не могу сделать следующего?

> let array2d : int[,] = Array2D.zeroCreate 10 10;;
> let array1d = array2d.[0];;

error FS0001: This expression was expected to have type
    'a []    
but here has type
    int [,]
17
задан Ming-Tang 25 May 2010 в 23:50
поделиться

1 ответ

Разница в том, что 'a[][] представляет массив массивов (возможно, разной длины), а в 'a[,] - прямоугольный двумерный массив. Первый тип также называется рваные массивы, а второй тип - многомерные массивы. Разница такая же, как и в C#, поэтому вы можете посмотреть документацию по C# для рваных массивов и многомерных массивов. Также есть отличная документация в 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

Чтобы получить одну "строку" многомерного массива, можно использовать нотацию slice:

let row = array2d.[0,*];;

См. https://docs. microsoft.com/en-us/dotnet/fsharp/language-reference/arrays#array-slicing-and-multidimensional-arrays

35
ответ дан 30 November 2019 в 11:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: