Подтвердить что ты не робот

Добавить массив в массив массивов в PowerShell

Я пытаюсь создать многомерный массив в PowerShell программно, используя CSV файлы, расположенные на диске. Я импортировал массив во временную переменную, а затем добавлял массив в массив. Вместо массива массивов я получаю один массив с общим количеством строк. Я работал с меньшими массивами и нашел следующее:

$array1 = "11","12","13"
$array2 = "21","22","23"
$array3 = "31","32","33"

$arrayAll = $array1, $array2, $array3
$arrayAll.Count # returns 3

$arrayAll = @();
$arrayAll += $array1
$arrayAll += $array2
$arrayAll += $array3

$arrayAll.count # returns 9

Первый метод построения массива работает, но мне нужно иметь возможность использовать второй метод. Как это исправить?

4b9b3361

Ответ 1

Это обычная магия, массивы (и другие коллекции) могут неожиданно разворачиваться. Используйте оператор запятой (он создает/применяет массив с одним элементом и избегает разворачивания):

$array1 = "11","12","13"
$array2 = "21","22","23"
$array3 = "31","32","33"

$arrayAll = $array1, $array2, $array3
$arrayAll.Count # returns 3

$arrayAll = @()
$arrayAll += , $array1
$arrayAll += , $array2
$arrayAll += , $array3

$arrayAll.count # returns 3

$arrayAll[1] # gets "21","22","23", i.e. $array2

Ответ 2

Не уверен, что я не знаю, что вы ищете, но может помочь.

PS> $arrayAll = New-Object int[][] (3,3)
PS> $arrayAll[0] = $array1
PS> $arrayAll[1] = $array2
PS> $arrayAll[2] = $array3

PS> $arrayAll.Count
3

PS> $arrayAll[1][2]
23

Это способ кодирования массива массива.

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

PS> $arrayAll = New-Object 'int[,]' (3,3)
PS> $arrayAll[2,0] = 12