Добавить массив в массив массивов в 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
Первый метод построения массива работает, но мне нужно иметь возможность использовать второй метод. Как это исправить?
Ответы
Ответ 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