Насколько я вижу, нет функции библиотеки F #, которая превратила бы несколько одномерных массивов в один 2D-массив, но вы можете написать свою собственную функцию, используя Array2D.init
:
let joinInto2D (arrays:_[][]) =
Array2D.init arrays.Length (arrays.[0].Length) (fun i j ->
arrays.[i].[j])
Требуется массив массивов, поэтому, когда вы вызываете его, вы передаете ему массив, содержащий все массивы, которые вы хотите объединить (например, [| arr1; arr2 |]
для объединения двух массивов). Функция объединяет несколько одномерных массивов в один двумерный массив, который содержит одну строку для каждого входного массива. Предполагается, что длина всех указанных массивов одинакова (может быть хорошей идеей добавить проверку, чтобы проверить это, например, используя Array.forall
). Функция init
создает массив указанных измерений, а затем вызывает нашу лямбда-функцию для вычисления значения для каждого элемента - в лямбда-функции мы используем строку как индекс в массиве массивов, а столбец - как индекс в индивидуальный массив.
Вот пример, показывающий, как использовать функцию:
> let arr1 = [| 1; 2; 3 |]
let arr2 = [| 4; 5; 6 |];;
> joinInto2D [| arr1; arr2 |];;
val it : int [,] = [[1; 2; 3]
[4; 5; 6]]
РЕДАКТИРОВАТЬ: Уже есть функция для этого - приятно! Я оставлю здесь ответ, потому что он все еще может быть полезен, например, если вы хотите объединить одномерные массивы в виде столбцов (вместо строк, что является поведением, реализованным array2D
.