Добавление массива к массиву массивов в PowerShell - PullRequest
43 голосов
/ 28 мая 2011

Я пытаюсь создать многомерный массив в 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

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

Ответы [ 2 ]

81 голосов
/ 28 мая 2011

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

$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
3 голосов
/ 28 мая 2011

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

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...