Arrays são uma característica fundamental da linguagem da maioria das linguagens de programação. Eles são uma coleção de valores ou objetos e são, portanto, difíceis de evitar. Vamos ver de perto os arrays e tudo o que eles têm para oferecer.

  • Índice de página
  • O que é um array?,correspondência
  • $nulo ou vazio
    • Todas as eq
  • a Adição de matrizes
    • Array adição
    • Plus é igual a +=
    • Pipeline de atribuição
  • Tipos de Matriz
    • Strongly typed arrays
    • ArrayList
    • Lista Genérica
      • Lista
      • Remove()
    • Mais coleções
  • Outras nuances
    • Pré-matrizes de tamanho
    • Multiplicação de matrizes
    • Inicializar com 0
    • matrizes Aninhadas
    • Write-Output -NoEnumerate
      • Retornar um array
  • mais alguma coisa?,
  • O que é um array?

    eu vou começar com uma descrição técnica básica do que arrays são e como eles são usados pela maioria das linguagens de programação antes de eu mudar para as outras maneiras que o PowerShell faz uso deles.

    um array é uma estrutura de dados que serve como uma coleção de vários itens. Você pode iterar sobre o array ou acessar itens individuais usando um índice. O array é criado como um pedaço sequencial de memória onde cada valor é armazenado ao lado do outro.vou tocar em cada um desses detalhes à medida que avançamos.,

    uso básico

    porque as matrizes são uma característica básica de PowerShell, existe uma sintaxe simples para trabalhar com elas em PowerShell.

    Criar uma matriz com @()

    Uma matriz vazia pode ser criado usando @()

     PS> $data = @() PS> $data.count 0

    podemos criar uma matriz e sementes com valores apenas colocando-os em @() parênteses.

     PS> $data = @('Zero','One','Two','Three') PS> $data.count 4 PS> $data Zero One Two Three

    Esta lista tem 4 itens. Quando chamamos a variável

    , vemos a lista dos nossos itens., Se for um array de strings, então teremos uma linha por string.

    Podemos declarar um array em várias linhas. A vírgula é opcional neste caso e geralmente excluída.

     $data = @( 'Zero' 'One' 'Two' 'Three' )

    Prefiro declarar as minhas matrizes em várias linhas como esta. Não só fica mais fácil de ler quando você tem vários itens, ele também torna mais fácil de comparar com versões anteriores ao usar o controle de código.,

    outra sintaxe

    é comumente entendido que@() é a sintaxe para criar um array, mas listas separadas por vírgulas funcionam a maior parte do tempo.

     $data = 'Zero','One','Two','Three'

    Saída de Gravação para criar arrays

    Um pouco cool truque que vale a pena mencionar é que você pode usar Write-Output para rapidamente criar seqüências de caracteres no console.

     $data = Write-Output Zero One Two Three

    isto é útil porque você não tem que colocar aspas em torno das strings quando o parâmetro aceita strings., Nunca faria isto num guião, mas é um jogo justo na consola.

    acessando itens

    Agora que você tem um array com itens nele, você pode querer acessar e atualizar esses itens.

    Offset

    para aceder a itens individuais, usamos os parêntesis com um valor de offset a partir de 0. Esta é a forma como fazemos o primeiro item na matriz:

     PS> $data = 'Zero','One','Two','Three' PS> $data Zero

    A razão pela qual utilizamos zero aqui é porque o primeiro item está no início da lista, então, nós usamos um deslocamento de 0 itens para chegar a ele., Para chegar ao segundo item, precisamos usar um offset de 1 para saltar o primeiro item.

     PS> $data One

    isto significaria que o último item está na posição 3.

     PS> $data Three

    Index

    agora pode ver porque escolhi os valores que escolhi para este exemplo. Introduzi isto como uma compensação porque é isso que realmente é, mas esta compensação é mais comumente referida como um índice. Um índice que começa em 0. Para o resto deste artigo vou chamar a compensação de um índice.,

    truques de índice especiais

    na maioria das línguas, só pode indicar um único número como índice e obterá um único item de volta. PowerShell é muito mais flexível. Você pode usar vários índices ao mesmo tempo. Ao fornecer uma lista de índices, podemos selecionar vários itens.

     PS> $data Zero Two Three

    as rubricas serão devolvidas com base na ordem dos índices fornecidos. Se você duplicar um índice, você vai obter esse item das duas vezes.,

     PS> $data Three Zero Three

    podemos especificar uma sequência de números com o construído em .. operador.

     PS> $data One Two Three

    isto também funciona ao contrário.

     PS> $data Three Two One

    pode usar valores de índice negitivo para compensar a partir do fim. Então, se você precisar do último item da lista, você pode usar -1.,

     PS> $data Three

    Fora dos limites

    Na maioria dos idiomas, se você tentar acessar um índice de um item que está após o final da matriz, você teria algum tipo de erro ou uma exceção. O PowerShell não te dará nada em silêncio.

     PS> $null -eq $data True

    não é Possível indexar uma matriz nula

    Se a variável é $null e tenta índice é como uma matriz, você vai ter uma System.Management.Automation.RuntimeException exceção com a mensagem de Cannot index into a null array.,

     PS> $empty = $null SP> $empty Error: Cannot index into a null array.

    portanto, certifique-se que as suas matrizes não são $null antes de tentar aceder aos elementos dentro delas.

    Contagem

    Arrays e outras coleções têm uma propriedade de contagem que lhe diz quantos itens estão na matriz.

     PS> $data.count 4

    PowerShell 3.0 adicionou uma propriedade de contagem à maioria dos objetos. você pode ter um único objeto e ele deve lhe dar uma contagem de 1.,

     PS> $date = Get-Date PS> $date.count 1

    $null tem uma contagem de propriedade, exceto ele retorna 0.

     PS> $null.count 0

    Existem algumas armadilhas aqui que eu vou revisitar quando eu cobrir a verificação de $null vazio ou matrizes mais tarde neste artigo.

    Off by one errors

    a common programming error is created because arrays start at index 0. Uma falha por um erro pode ser introduzida de duas maneiras muito comuns.,

    o primeiro é pensando mentalmente que você quer o segundo item e usando um índice de 2 e realmente obter o terceiro item. Ou pensando que você tem4 itens e que você quer o último item, então você só vai usar o tamanho para acessar o último item.

     $data

    PowerShell está perfeitamente feliz em permitir que você faça isso e lhe dê exatamente qual item existe no índice 4, $null. Você deve estar usando $data.count - 1 ou o -1 que aprendemos acima.,

     PS> $data Three

    é aqui que pode utilizar o índice

    para obter o último elemento.

     PS> $data Three

    Lee Dailey também apontou para mim que podemos usar $data.GetUpperBound(0) para obter o máximo número de índice.

     PS> $data.GetUpperBound(0) Three

    a segunda forma mais comum é ao iterar a lista e simplesmente não parar na hora certa. Vou revisitar isto quando falarmos sobre usar ofor loop.,

    atualizando itens

    podemos usar o mesmo índice para atualizar itens existentes na matriz. Isso nos dá acesso direto para atualizar itens individuais.

     $data = 'dos' $data = 'tres'

    se tentarmos actualizar um item que já passou o último elemento, então teremos um Index was outside the bounds of the array. Erro.

    vou revisitar isso mais tarde quando eu falar sobre como fazer um array maior.

    iteração

    em algum momento, você terá que andar ou iterar a lista inteira e realizar alguma ação para cada item da matriz.,

    Pipeline

    Arrays and the PowerShell pipeline are meant for each other. Esta é uma das formas mais simples de processar esses valores. Quando você passa um array para um pipeline, cada item dentro do array é processado individualmente.

     PS> $data = 'Zero','One','Two','Three' PS> $data | ForEach-Object {"Item: "} Item: Item: Item: Item: 

    Se você ainda não viu $PSItem antes, só sei que é a mesma coisa que $_. Você pode usar qualquer um porque ambos representam o objeto atual no pipeline.,

    ForEach loop

    The ForEach loop funciona bem com coleções. Usando a sintaxe: foreach ( <variable> in <collection> )

     foreach ( $node in $data ) { "Item: " }

    ForEach método

    eu tendem a esquecer-se sobre isso, mas ele funciona bem para operações simples. PowerShell permite-lhe chamar .ForEach() numa colecção.

     PS> $data.foreach({"Item "}) Item Item Item Item 

    .foreach() tem um parâmetro que é um bloco de script. Você pode deixar os parênteses e apenas fornecer o bloco de script.,

     $data.foreach{"Item "}

    Esta é uma sintaxe menos conhecida, mas funciona da mesma forma. Este método foreach foi adicionado em PowerShell 4.0.

    para loop

    o for loop é usado pesadamente na maioria das outras línguas, mas você não vê muito em PowerShell. Quando você vê isso, muitas vezes é no contexto de caminhar uma matriz.

     for ( $index = 0; $index -lt $data.count; $index++) { "Item: " -f $data }

    A primeira coisa que fazemos é inicializar um $index 0., Em seguida, adicionamos a condição de que $index deve ser inferior a$data.count. Finalmente, especificamos que cada vez que fazemos loop que me deve aumentar o índice por 1. In this case $index++ is short for$index = $index + 1.

    sempre que estiver a utilizar umfor loop, preste especial atenção à condição. I used $index -lt $data.count here. É muito fácil obter a condição ligeiramente errada para obter um off por um erro em sua lógica., Using $index -le $data.count or $index -lt ($data.count - 1) are ever so slightly wrong. Isso faria com que o seu resultado processasse muitos ou poucos itens. Este é o clássico fora por um erro.

    ciclo de comutação

    Este é um que é muito fácil de ignorar. Se você fornecer um array para uma declaração de switch, ele irá corresponder em cada item do array.

     $data = 'Zero','One','Two','Three' switch( $data ) { 'One' { 'Tock' } 'Three' { 'Tock' } Default { 'Tick' } }

    Isto irá produzir este resultado:

     Tick Tock Tick Tock

    Há um monte de coisas legais como essa que podemos fazer com a instrução switch., Tenho outro artigo dedicado a isto.

    • Tudo o que você sempre quis saber sobre a instrução switch

    a Atualização de valores

    Quando a matriz é uma coleção de seqüência de caracteres ou inteiros (tipos de valor), às vezes, você vai querer atualizar os valores na matriz como você loop sobre eles. A maioria dos loops acima usam uma variável no loop que contém uma cópia do valor. Se você atualizar essa variável, o valor original no array não é atualizado.

    a exceção a essa afirmação é o for loop., Se você está querendo andar um array e atualizar os valores dentro dele, então o for loop é o que você está procurando.

     for ( $index = 0; $index -lt $data.count; $index++ ) { $data = "Item: " -f $data }

    Este exemplo assume um valor por índice, faz algumas alterações e, em seguida, utiliza o mesmo índice para atribuir-lo de volta.

    Arrays of Objects

    So far, the only thing we have placed in an array is a value type, but arrays can also contain objects.

     $data = @( @{FirstName='Kevin';LastName='Marquette'} @{FirstName='John'; LastName='Doe'} )

    muitos cmdlets devolvem colecções de objectos como arrays quando os atribui a uma variável.,

     $processList = Get-Process

    Todas as características básicas que nós já falamos sobre como, ainda, aplica a matrizes de objetos com alguns detalhes que vale a pena destacar.

    acessando propriedades

    podemos usar um índice para acessar um item individual em uma coleção assim como com tipos de valor.

     PS> $data FirstName LastName ----- ---- Kevin Marquette

    podemos aceder e actualizar directamente as propriedades.,

     PS> $data.FirstName Kevin PS> $data.FirstName = 'Jay' PS> $data FirstName LastName ----- ---- Jay Marquette

    propriedades da Matriz

    Normalmente você teria para enumerar a lista completa como esta o acesso a todas as propriedades:

     PS> $data | ForEach-Object {$_.LastName} Marquette Doe

    Ou usando o Select-Object -ExpandProperty cmdlet.

     PS> $data | Select-Object -ExpandProperty LastName Marquette Doe

    Mas PowerShell oferece-nos a possibilidade de solicitação de LastName diretamente. PowerShell irá enumerá-los a todos por nós e dar-nos uma lista limpa.,

     PS> $data.LastName Marquette Doe

    A enumeração ainda acontece, mas não vemos a complexidade por trás dele.

    Where-Object filtering

    This is where Where-Object comes in so we can filter and select what we want out of the array based on the properties of the object.

     PS> $data | Where-Object {$_.FirstName -eq 'Kevin'} FirstName LastName ----- ---- Kevin Marquette

    podemos escrever que a mesma consulta como esta para obter o FirstName estamos procurando.,

     $data | Where FirstName -eq Kevin

    , Onde()

    Matrizes de ter uma Where() método que permite que você especifique um scriptblock para o filtro.

    Esta característica foi adicionada em PowerShell 4.0.

    atualizando objetos em loops

    com tipos de valor, a única maneira de atualizar o array é usar um loop for Porque precisamos saber o índice para substituir o valor. Temos mais opções com objetos porque eles são tipos de referência., Aqui está um exemplo rápido:

     foreach($person in $data) { $person.FirstName = 'Kevin' }

    Este ciclo é a caminhada de cada objeto $data array. Como os objetos são tipos de referência, o $person referências variáveis o mesmo objeto exato que está na matriz. Então atualizações para as suas propriedades irão atualizar o original.

    Você ainda não pode substituir todo o objeto desta forma. Se você tentar atribuir um novo objeto à variável $person, Você está atualizando a referência da variável para algo mais que já não aponta para o objeto original na matriz., Isto não irá funcionar como seria de esperar:

     foreach($person in $data) { $person = @{ FirstName='Kevin' LastName='Marquette' } }

    operadores

    os operadores em PowerShell também trabalham em matrizes. Alguns deles trabalham de forma ligeiramente diferente.

    -join

    The-join operator is the most obvious one so we will look at it first. I like the -join operator and use it often. Ele irá juntar todos os elementos do array com um carácter ou cadeia de caracteres que você especificar.,

     PS> $data = @(1,2,3,4) PS> $data -join '-' 1-2-3-4 PS> $data -join ',' 1,2,3,4

    Uma das características que eu gosto sobre o -join operador é que ele lida com itens únicos.

     PS> 1 -join '-' 1

    i use this inside logging and verbose messages.

     PS> $data = @(1,2,3,4) PS> "Data is $($data -join ',')." Data is 1,2,3,4.

    -associação $array

    Aqui está um truque que Lee Dailey apontou para mim., Se você quiser se juntar tudo sem um delimitador, em vez de fazer isso:

     PS> $data = @(1,2,3,4) PS> $data -join $null 1234

    Você pode usar -join com a matriz como o parâmetro com nenhum prefixo. Veja este exemplo para ver de que estou a falar.

     PS> $data = @(1,2,3,4) PS> -join $data 1234

    -substituir e -split

    Os outros operadores, como -replace e -split será executado em cada item na matriz. Não posso dizer que já os tenha usado desta maneira, mas aqui está um exemplo.,

     PS> $data = @('ATX-SQL-01','ATX-SQL-02','ATX-SQL-03') PS> $data -replace 'ATX','LAX' LAX-SQL-01 LAX-SQL-02 LAX-SQL-03

    -contém

    -contains operador irá permitir que você verifique uma matriz de valores para ver se ele contém um valor especificado.

     PS> $data = @('red','green','blue') PS> $data -contains 'green' True

    -in

    quando tiver um único valor que gostaria de verificar corresponde a um de vários valores, poderá utilizar o operador

    O valor seria no lado esquerdo e o array no lado direito da operação.,

     PS> $data = @('red','green','blue') PS> 'green' -in $data True

    isto pode ficar caro se a lista for grande. Eu vou muitas vezes usar um padrão regex se eu estou verificando mais de 4-5 valores.

     PS> $data = @('red','green','blue') PS> $pattern = "^({0})$" -f ($data -join '|') PS> $pattern ^(red|green|blue)$ PS> 'green' -match $pattern True

    -eq e-ne

    igualdade e arrays podem ficar complicados. Quando o array estiver do lado esquerdo, cada item será comparado. Em vez de retornar True, ele irá retornar o objeto que corresponde.,

     PS> $data = @('red','green','blue') PS> $data -eq 'green' green

    quando utilizar o operador , obteremos todos os valores que não são iguais ao nosso valor.

     PS> $data = @('red','green','blue') PS> $data -ne 'green' red blue

    Quando você usar isso em um if() instrução, um valor que é retornado é um True valor. Se não for devolvido nenhum valor, então é um valor False. Ambas as declarações seguintes irão avaliar para True.,

     $data = @('red','green','blue') if ( $data -eq 'green' ) { 'Green was found' } if ( $data -ne 'green' ) { 'And green was not found' }

    voltarei a isso em um momento em que falamos sobre o teste para o $null.

    – match

    The -match operator will try to match each item in the collection.

     PS> $servers = @( 'LAX-SQL-01' 'LAX-API-01' 'ATX-SQL-01' 'ATX-API-01' ) PS> $servers -match 'SQL' LAX-SQL-01 ATX-SQL-01

    Quando você usar -match com um único valor de uma variável especial $Matches fica preenchida com correspondência de informações. Este não é o caso quando um array é processado desta forma.

    Podemos ter a mesma abordagem com Select-String.,

     $servers | Select-String SQL

    vou dar uma olhada no Select-String-match e o $matches variável em outro post chamado muitas maneiras de usar regex.

    $null ou empty

    Testing for$null or empty arrays can be tricky. Aqui estão as armadilhas comuns com matrizes.

    em um relance, esta declaração parece que deve funcionar.

     if ( $array -eq $null) { 'Array is $null' }

    Mas eu fui apenas sobre como -eq verifica cada item na matriz., Assim, podemos ter uma array de vários itens com um único $valor nulo e de avaliar a $true

     $array = @('one',$null,'three') if ( $array -eq $null) { 'I think Array is $null, but I would be wrong' }

    é por Isso que é uma das melhores práticas para colocar o $null no lado esquerdo do operador. Isto faz deste cenário um não-problema.

     if ( $null -eq $array ) { 'Array actually is $null' }

    Uma $null array não é a mesma coisa como uma matriz vazia. Se você sabe que você tem um array, verifique a contagem de objetos nele., If the array is $null, the count will be 0.

     if ( $array.count -gt 0 ) { 'Array is not empty' }

    há mais uma armadilha para vigiar aqui. Você pode usar o count mesmo que você tenha um único objeto, a menos que esse objeto seja um PSCustomObject. Este é um bug que é fixado em PowerShell 6.1. Isso é uma boa notícia, mas muitas pessoas ainda estão no 5.1 e precisam de ter cuidado com isso.

     PS> $object = @{Name='TestObject'} PS> $object.count $null

    se ainda estiver em PowerShell 5.,1, você pode embrulhar o objeto em um array antes de verificar a contagem para obter uma contagem precisa.

     if ( @($array).count -gt 0 ) { 'Array is not empty' }

    to fully play it safe, check for$null, then check the count.

     if ( $null -ne $array -and @($array).count -gt 0 ) { 'Array is not empty' }

    All-eq

    recentemente vi alguém perguntar como verificar se cada valor de uma matriz corresponde a um determinado valor. O usuário Reddit / u / bis tinha esta solução inteligente que verifica quaisquer valores incorretos e, em seguida, vira o resultado.,

     $results = Test-Something if ( -not ( $results -ne 'Passed') ) { 'All results a Passed' }

    a Adição de matrizes

    neste ponto, você está começando a me perguntar como adicionar itens a uma matriz. A resposta rápida é que você não pode. um array é um tamanho fixo na memória. Se você precisa cultivá-lo ou adicionar um único item a ele, então você precisa criar um novo array e copiar todos os valores do array antigo. Isso soa caro e como um monte de trabalho, no entanto, PowerShell esconde a complexidade de criar o novo array.

    Array addition

    We can use the addition operator with arrays to create a new array., Então dadas estas duas matrizes:

     $first = @( 'Zero' 'One' ) $second = @( 'Two' 'Three' )

    podemos adicioná-las juntas para obter uma nova matriz.

     PS> $first + $second Zero One Two Three

    > Plus é igual a +=

    podemos criar uma nova matriz no lugar e adicionar um item como este:

     $data = @( 'Zero' 'One' 'Two' 'Three' ) $data += 'four'

    Basta lembrar que a cada vez que você usar += que são a duplicação e a criação de uma nova matriz. Esta não é uma questão para pequenos conjuntos de dados, mas tem uma escala extremamente fraca.,

    atribuição de Pipeline

    pode atribuir os resultados de qualquer pipeline a uma variável. Será um array se contiver vários itens.

     $array = 1..5 | ForEach-Object { "ATX-SQL-$PSItem" }

    normalmente, quando pensamos em usar o oleoduto, pensamos nos típicos liners de carapaça única. Nós podemos alavancar o pipeline com declarações foreach() e outros loops. Então, em vez de adicionar itens a uma matriz em um loop, nós podemos deixar os itens no pipeline.,

     $array = foreach ( $node in (1..5)) { "ATX-SQL-$node" }

    atribuindo os resultados de foreach para uma variável, podemos capturar todos os objetos e criar uma única matriz.

    tipos de Array

    por padrão, um array em PowerShell é criado como um ] tipo. Isto permite que ele contenha qualquer tipo de objeto ou valor. Isto funciona porque tudo é herdado do tipo PSObject.

    matrizes fortemente tipadas

    você pode criar um array de qualquer tipo usando uma sintaxe similar., Quando você cria um array fortemente digitado, ele só pode conter valores ou objetos do tipo especificado.

    ArrayList

    adicionar itens a um array é uma de suas maiores limitações, mas existem algumas outras coleções que podemos usar para resolver este problema.

    O ArrayList é comumente uma das primeiras coisas em que pensamos quando precisamos de uma matriz que seja mais rápida para trabalhar. Age como uma matriz de objetos em todos os lugares que precisamos, mas lida com a adição de itens rapidamente.

    Aqui está como criamos um id

    e adicionamos itens a ele.,

     $myarray = ::new() $myArray.Add('Value')

    estamos a ligar para o.Net para obter este tipo. Neste caso estamos usando o construtor padrão para criá-lo. Então chamamos o método Add para adicionar um item a ele.

    A razão pela qual estou usando no início da linha é para suprimir o código de retorno. Algumas chamadas. Net farão isso e podem criar saída inesperada.

    Se os únicos dados que você tem em seu array são strings, então também dê uma olhada em usar StringBuilder., É quase a mesma coisa, mas tem alguns métodos que são apenas para lidar com cordas. O StringBuilder é especialmente concebido para o desempenho.

    • cadeias de concatenação usando StringBuilder

    é realmente comum ver as pessoas se moverem para ArrayList a partir de arrays. Mas vem de um tempo em que C# não tinha suporte genérico., ArrayList é depreciado em suporte para o genérico List

    Lista Genérica

    Um tipo genérico é um tipo especial em C# que definem uma generalizada de classe e o usuário deverá especificar os tipos de dados que irá utilizar quando criado. Então, se você quiser uma lista de números ou strings, você definiria que você quer uma lista deint oustring tipos.

    Aqui está como você cria uma lista para strings.

     $mylist = ]::new()

    Ou uma lista de números.,

     $mylist = ]::new()

    podemos lançar uma matriz existente para uma lista como esta, sem criar primeiro o objecto:

     $mylist = ]@(1,2,3)

    Nós podemos encurtar a sintaxe um pouco com o using namespace instrução no PowerShell 5 e versões mais recentes. A declaração using precisa ser a primeira linha do seu script. Ao declarar um espaço de nomes, PowerShell irá deixá-lo fora dos tipos de dados quando você os referencia.,

     using namespace System.Collections.Generic $myList = ]@(1,2,3)

    Isso faz com que o List muito mais utilizável.

    tem à sua disposição um método similar Add. Ao contrário do ArrayList, não há valor de retorno no id

    método para que não tenhamos quevoid it.

     $myList.Add(10)

    e ainda podemos aceder aos elementos como outras matrizes.,

     PS> $myList 10

    Lista

    Você pode ter uma lista de qualquer tipo, mas quando você não sabe o tipo de objetos, você pode usar ] para contê-los.

     $list = ]::new()

    Remove()

    ArrayList e o genérico List apoio remover itens da coleção.

     using namespace System.Collections.Generic $myList = ]@('Zero','One','Two','Three') $myList.Remove("Two") Zero One Three

    Ao trabalhar com tipos de valor, ele irá remover o primeiro da lista., Você pode chamá-lo vezes sem conta para continuar a remover esse valor. Se você tem tipos de referência, você tem que fornecer o objeto que você quer removido.

     ]$drives = Get-PSDrive $drives.remove($drives)
     $delete = $drives $drives.remove($delete)

    O método remove retornará true se ele foi capaz de encontrar e remover o item da coleção.

    mais coleções

    Existem muitas outras coleções que podem ser usadas, mas estas são as boas substituições genéricas de array., Se você está interessado em aprender mais sobre estas opções, dê uma olhada neste Gist que Mark Kraus juntou.

    outras nuances

    Agora que eu cobri todas as funcionalidades principais, Aqui estão mais algumas coisas que eu queria mencionar antes de terminar isto.

    matrizes pré-dimensionadas

    eu mencionei que você não pode mudar o tamanho de um array uma vez que ele é criado. Nós podemos criar um array de um tamanho pré-determinado chamando-o com onew($size) construtor.,

     $data = ]::new(4) $data.count 4

    multiplicando arrays

    um pequeno truque interessante é que você pode multiplicar um array por um inteiro.

     PS> $data = @('red','green','blue') PS> $data * 3 red green blue red green blue red green blue

    Inicializar com 0

    Um cenário comum é que você deseja criar uma matriz com zeros. Se você só vai ter inteiros, um array fortemente digitado de inteiros padrão para todos os zeros.

     PS> ]::new(4) 0 0 0 0

    podemos usar o truque de multiplicação para fazer isso também.,

     PS> $data = @(0) * 4 PS> $data 0 0 0 0

    a coisa boa sobre o truque de multiplicação é que você pode usar qualquer valor. Então se você preferir ter 255 como seu valor padrão, esta seria uma boa maneira de fazê-lo.

     PS> $data = @(255) * 4 PS> $data 255 255 255 255

    matrizes Aninhadas

    Uma matriz dentro de uma matriz é chamada de uma matriz aninhada. Eu não uso isso muito em PowerShell mas eu usei – os mais em outras línguas. Considere usar um array de arrays quando seus dados se encaixam em uma grade como padrão.

    Aqui estão duas maneiras que podemos criar um array de 2 dimensões.,

     $data = @(@(1,2,3),@(4,5,6),@(7,8,9)) $data2 = @( @(1,2,3), @(4,5,6), @(7,8,9) )

    A vírgula é muito importante nesses exemplos. Eu dei um exemplo anterior de uma matriz normal em várias linhas onde a vírgula era opcional. Não é o caso de uma matriz multidimensional.

    A forma como usamos a notação de índice muda ligeiramente agora que temos uma matriz aninhada. Usando o $data acima, é assim que acederemos ao valor 3.

     PS> $outside = 0 PS> $inside = 2 PS> $data 3

    Add a set of bracket for each level of array nesting., O primeiro conjunto de parênteses é para o mais array exterior e então você trabalha seu caminho para dentro de lá.

    Write-Output-NoEnumerate

    PowerShell gosta de desembrulhar ou enumerar arrays. Este é um aspecto central da forma como o PowerShell usa o gasoduto, mas há alturas em que você não quer que isso aconteça.

    I comumente canalizar objetos paraGet-Member para aprender mais sobre eles. Quando eu encaminho um array para ele, ele é desembrulhado e Get-Member vê os membros do array e não o array real.,

     PS> $data = @('red','green','blue') PS> $data | Get-Member TypeName: System.String ...

    Para evitar que o desembrulhar de matriz, você pode usar Write-Object -NoEnumerate.

     PS> Write-Output -NoEnumerate $data | Get-Member TypeName: System.Object ...

    i have a second way to do this that’s more of a hack (and I try to avoid hacks like this). Você pode colocar uma vírgula na frente da matriz antes de conectá-la.

     PS> ,$data | Get-Member TypeName: System.Object ...

    devolve uma lista

    Esta mudança de linha de arrays também acontece quando você envia ou devolve valores de uma função., Você ainda pode obter um array se você atribuir a saída a uma variável de modo que este não é normalmente um problema.

    a captura é que você terá uma nova matriz. Se isso alguma vez for um problema, você pode usar Write-Output -NoEnumerate $array ou return ,$array para trabalhar em torno dele.mais alguma coisa?sei que isto é muito para assimilar. Minha esperança é que você vai aprender algo com este artigo cada vez que você lê-lo e que vai se tornar uma boa referência para você por um longo tempo vindouro., Se você achou isso útil, por favor, compartilhe com outros que você acha que vai ganhar valor com isso.

    a partir daqui, eu recomendo que você confira um post semelhante que eu escrevi sobre hashtables.

    Deixe uma resposta

    O seu endereço de email não será publicado. Campos obrigatórios marcados com *