Ao usar o $array.Add()método, você está tentando adicionar o elemento à matriz existente. Uma matriz é uma coleção de tamanho fixo; portanto, você receberá um erro porque não pode ser estendido.
$array += $elementcria uma nova matriz com os mesmos elementos que a antiga + o novo item, e essa nova matriz maior substitui a antiga na $arrayvariável -variable
Você pode usar o operador + = para adicionar um elemento a uma matriz. Quando você o usa, o Windows PowerShell realmente cria uma nova matriz com os valores da matriz original e o valor agregado. Por exemplo, para adicionar um elemento com um valor de 200 à matriz na variável $ a, digite:
Obrigado :) Achei que poderia ser algo assim, mas achei que seria ineficiente com matrizes grandes, então a equipe do PowerShell estava fazendo algo diferente.
malgca
6
isso é exatamente correto, torna-se ineficiente com matrizes grandes. Infelizmente, para contornar isso, você precisa usar um tipo diferente: powershell.org/wp/2013/09/16/…
Nacht
3
Depende. Se você deseja adicionar e remover muitos membros, sim, tente Listou ArrayList. Eles serão muito mais rápidos. Pessoalmente, uso +=e organizo 99% do tempo, porque geralmente crio pequenos scripts descartáveis, onde os segundos extras não importam. Para scripts grandes com muitas opções de adição / remoção, onde eu quero otimizar e economizar tempo que uso Listou ArrayList.
Frode F.
3
Como as matrizes são sempre de tamanho fixo, alguém sabe por que o Add()método existe?
JohnLBevan
4
Porque é herdado de IList. Tente Get-Member -InputObject @()irá mostrar issoAdd Method int IList.Add(System.Object value)
Frode F.
113
Se você deseja uma matriz de tamanho dinâmico, faça uma lista. Você não apenas obterá a .Add()funcionalidade, mas como o @ frode-f explica, matrizes dinâmicas são mais eficientes em termos de memória e, de qualquer maneira, são uma prática melhor.
E é tão fácil de usar.
Em vez da sua declaração de matriz, tente o seguinte:
Eu tentei isso. Eu o crio usando o New-Object System.Collections.Generic.List [string], mas se o faço .GetType, ele diz que é uma matriz.
Preza8
1
Você já tentou usar a Add()função? Posso confirmar que, se você criar um Listobjeto genérico conforme mencionado acima, terá uma lista mutável para a qual poderá adicionar e remover itens usando os métodos Add()e Remove(), respectivamente.
Bender the Greatest
1
@ Preza8: (New-Object System.Collections.Generic.List[string]).GetType().Namerende List`1para mim, como esperado; talvez você tenha se aplicado +=à variável que contém a lista (em vez de chamar o .Add()método); nesse caso, o valor da variável seria realmente convertido em uma matriz ( System.Object[]).
List
ouArrayList
. Eles serão muito mais rápidos. Pessoalmente, uso+=
e organizo 99% do tempo, porque geralmente crio pequenos scripts descartáveis, onde os segundos extras não importam. Para scripts grandes com muitas opções de adição / remoção, onde eu quero otimizar e economizar tempo que usoList
ouArrayList
.Add()
método existe?IList
. TenteGet-Member -InputObject @()
irá mostrar issoAdd Method int IList.Add(System.Object value)
Se você deseja uma matriz de tamanho dinâmico, faça uma lista. Você não apenas obterá a
.Add()
funcionalidade, mas como o @ frode-f explica, matrizes dinâmicas são mais eficientes em termos de memória e, de qualquer maneira, são uma prática melhor.E é tão fácil de usar.
Em vez da sua declaração de matriz, tente o seguinte:
Adicionar itens é simples.
E se você realmente deseja uma matriz quando terminar, também há uma função para isso.
fonte
Add()
função? Posso confirmar que, se você criar umList
objeto genérico conforme mencionado acima, terá uma lista mutável para a qual poderá adicionar e remover itens usando os métodosAdd()
eRemove()
, respectivamente.(New-Object System.Collections.Generic.List[string]).GetType().Name
rendeList`1
para mim, como esperado; talvez você tenha se aplicado+=
à variável que contém a lista (em vez de chamar o.Add()
método); nesse caso, o valor da variável seria realmente convertido em uma matriz (System.Object[]
).$a = new-object collections.generic.list[object]
O idioma mais comum para criar uma matriz sem usar o ineficiente
+=
é algo assim, a partir da saída de um loop:fonte