Powershell - declarar array de arrays não é tão fácil? [duplicado]

Oct 16 2020

Tentei descrever uma pequena 'lista' de coisas, usando arrays de arrays. Um comportamento estranho que observei:

function write-it-out([array] $arrays) { foreach($a in $arrays) { write-host "items" $a[0] $a[1] } } $arrayOfArrays1 = @( 
  @("apple","orange"),
  @("monkey","bear")
)

$arrayOfArrays2 = @( @("android","linux") ) # it works write-it-out $arrayOfArrays1
# it wont
write-it-out $arrayOfArrays2

O primeiro caso produz as duas linhas esperadas com o seguinte conteúdo:

itens maçã laranja
itens macaco urso

Mas a segunda chamada de função não produz os resultados esperados

itens android linux

mas

itens e
itens li

Alguém sabe por quê? E como descrever um array contendo apenas um array dentro, não mais de um? Então, como consertar? Agradeça antecipadamente!

Respostas

1 RyanBolger Oct 16 2020 at 16:05

Não sei exatamente por que , mas quando você declara $arrayOfArrays2, o PowerShell está imediatamente desenrolando a matriz externa.

> $arrayOfArrays2.Count
2

> $arrayOfArrays2[0]
android

A fim de torná-lo não fizer isso, você pode adicionar uma vírgula a mais dentro da declaração de matriz externa como esta.

> $arrayOfArrays2 = @(,@("android","linux"))

> $arrayOfArrays2.Count 1 > $arrayOfArrays2[0]
android
linux

> write-it-out $arrayOfArrays2
Items android linux