los Arrays son una característica fundamental del lenguaje de la mayoría de los lenguajes de programación. Son una colección de valores u objetos y, por lo tanto, son difíciles de evitar. Echemos un vistazo de cerca a los arrays y todo lo que tienen para ofrecer.

  • Page Index
  • ¿Qué es un array?,partido
  • $nulo o vacío
    • Todas -eq
  • Añadir a las matrices
    • Array adición
    • Plus es igual a +=
    • Tubería de asignación
  • Tipos de Matriz
    • Establecimiento inflexible de tipos de matrices
    • ArrayList
    • Genérico de la Lista
      • Lista
      • Remove()
    • Más de colecciones
  • Otros matices
    • Pre-tamaño de las matrices
    • la Multiplicación de matrices
    • Inicializa con 0
    • matrices Anidadas
    • Write-Output -NoEnumerate
      • Devolver una matriz
  • Cualquier otra cosa?,
  • ¿qué es un array?

    voy a empezar con una descripción técnica básica de lo que son los arrays y cómo son utilizados por la mayoría de los lenguajes de programación antes de cambiar a las otras formas en que PowerShell hace uso de ellos.

    una matriz es una estructura de datos que sirve como una colección de múltiples elementos. Puede iterar sobre la matriz o acceder a elementos individuales mediante un índice. La matriz se crea como un fragmento secuencial de memoria donde cada valor se almacena justo al lado del otro.

    voy a tocar cada uno de esos detalles a medida que avanzamos.,

    uso básico

    dado que las matrices son una característica tan básica de PowerShell, existe una sintaxis sencilla para trabajar con ellas en PowerShell.

    Crear una matriz con @()

    Un array vacío puede ser creado usando @()

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

    podemos crear una matriz y de la semilla con valores sólo mediante la colocación de ellos en el @() paréntesis.

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

    Esta matriz tiene 4 elementos. Cuando llamamos a la variable $data, vemos la lista de nuestros elementos., Si es una matriz de cadenas, entonces tendremos una línea por cadena.

    Podemos declarar una matriz en varias líneas. La coma es opcional en este caso y generalmente se omite.

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

    yo prefiero a declarar mi matrices en varias líneas, que. No solo es más fácil de leer cuando tiene varios elementos, sino que también hace que sea más fácil de comparar con versiones anteriores cuando se utiliza el control de código fuente.,

    otra sintaxis

    se entiende comúnmente que @() es la sintaxis para crear una matriz, pero las listas separadas por comas funcionan la mayor parte del tiempo.

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

    Write-Output para crear matrices

    Un poco fría truco que vale la pena mencionar es que la puedes usar Write-Output para crear rápidamente cadenas de caracteres en la consola.

     $data = Write-Output Zero One Two Three

    Esto es bueno porque usted no tiene que poner comillas alrededor de las cuerdas cuando el parámetro acepta cadenas., Nunca haría esto en un guión, pero es un juego justo en la consola.

    acceder a elementos

    ahora que tiene una matriz con elementos en ella, es posible que desee acceder y actualizar esos elementos.

    Offset

    para acceder a elementos individuales, utilizamos los corchetes con un valor de offset que comienza en 0. Así es como obtenemos el primer elemento en nuestro array:

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

    la razón por la que usamos cero aquí es porque el primer elemento está al principio de la lista, por lo que usamos un desplazamiento de 0 elementos para llegar a él., Para llegar al segundo elemento, necesitaríamos usar un desplazamiento de 1 para omitir el primer elemento.

     PS> $data One

    Esto significaría que el último elemento es en el desplazamiento 3.

     PS> $data Three

    Índice

    Ahora usted puede ver por qué he escogido los valores que he hecho para este ejemplo. Introduje esto como un offset porque eso es lo que realmente es, pero este offset se conoce más comúnmente como un índice. Un índice que comienza en 0. Para el resto de este artículo llamaré al offset un índice.,

    trucos especiales de índice

    en la mayoría de los idiomas, solo puede especificar un solo número como índice y obtendrá un solo elemento de vuelta. PowerShell es mucho más flexible. Puede utilizar varios índices a la vez. Al proporcionar una lista de índices, podemos seleccionar varios elementos.

     PS> $data Zero Two Three

    Los artículos deberán ser devueltos por el orden de los índices proporcionados. Si duplica un índice, obtendrá ese elemento ambas veces.,

     PS> $data Three Zero Three

    se puede especificar una secuencia de números con el construido en el .. operador.

     PS> $data One Two Three

    Esto funciona a la inversa también.

     PS> $data Three Two One

    puede utilizar negitive los valores del índice de desplazamiento de la final. Por lo tanto, si necesita el último elemento de la lista, puede usar -1.,

     PS> $data Three

    límites

    En la mayoría de los idiomas, si intenta obtener acceso a un índice de un elemento que está más allá del final de la matriz, se obtiene algún tipo de error o una excepción. PowerShell no te dará nada en silencio.

     PS> $null -eq $data True

    No índice en un valor nulo de la matriz

    Si la variable es de $null e intenta índice como una matriz, usted recibirá un System.Management.Automation.RuntimeException excepción con el mensaje de Cannot index into a null array.,

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

    Así que asegúrese de que sus matrices no son $null antes de intentar acceder a los elementos dentro de ellos.

    Count

    los Arrays y otras colecciones tienen una propiedad count que le indica cuántos elementos hay en el array.

     PS> $data.count 4

    PowerShell 3.0 añadido un recuento de la propiedad a la mayoría de los objetos. puede tener un solo objeto y debe darle un recuento de 1.,

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

    Aún $null tiene un recuento de la propiedad, excepto que devuelve 0.

     PS> $null.count 0

    Hay algunas trampas aquí que voy a volver cuando me tapa la comprobación de $null o matrices vacías más adelante en este artículo.

    off by one errors

    se crea un error de programación común porque los arrays comienzan en el índice 0. Un error off by one se puede introducir de dos maneras muy comunes.,

    el primero es pensando mentalmente que desea el segundo elemento y utilizando un índice de 2 y realmente obtener el tercer elemento. O pensando que tiene elementos 4 y desea el último elemento, por lo que solo usará el tamaño para acceder al último elemento.

     $data

    PowerShell es perfectamente feliz de dejar de hacerlo y darle exactamente lo que existe un elemento en el índice 4, $null. Debe usar $data.count - 1o el -1 que aprendimos anteriormente.,

     PS> $data Three

    aquí es donde usted puede utilizar el -1 índice para obtener el último elemento.

     PS> $data Three

    Lee Dailey también me señaló que podemos usar $data.GetUpperBound(0) para obtener el máximo número de índice.

     PS> $data.GetUpperBound(0) Three

    La segunda forma más común es cuando se itera la lista y no parar en el momento adecuado. Revisaré esto cuando hablemos de usar el bucle for.,

    Updating items

    Podemos usar el mismo índice para actualizar los elementos existentes en el array. Esto nos da acceso directo para actualizar elementos individuales.

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

    Si tratamos de actualizar un elemento que está más allá del último elemento, a continuación, obtenemos un Index was outside the bounds of the array. error.

    revisaré esto más adelante cuando hable sobre cómo hacer un array más grande.

    iteración

    en algún momento, tendrá que recorrer o iterar toda la lista y realizar alguna acción para cada elemento de la matriz.,

    canalización

    Las matrices y la canalización de PowerShell están pensadas entre sí. Esta es una de las formas más simples de procesar esos valores. Cuando pasa una matriz a una canalización, cada elemento dentro de la matriz se procesa individualmente.

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

    Si usted no ha visto $PSItem antes, solo se sabe que se trata de la misma cosa como $_. Puede usar cualquiera de los dos porque ambos representan el objeto actual en la canalización.,

    bucle ForEach

    el bucle ForEach funciona bien con colecciones. Usando la sintaxis: foreach ( <variable> in <collection> )

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

    método ForEach

    tiendo a olvidar acerca de esto, pero funciona muy bien para las operaciones simples. PowerShell permite llamar a .ForEach() en una colección.

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

    El .foreach() tiene un parámetro que es un bloque de secuencia de comandos. Puede soltar los paréntesis y simplemente proporcionar el bloque de script.,

     $data.foreach{"Item "}

    Este es un menos conocido de la sintaxis, pero funciona de la misma manera. Este método foreach se agregó en PowerShell 4.0.

    For loop

    el buclefor se usa mucho en la mayoría de los otros idiomas, pero no se ve mucho en PowerShell. Cuando lo ves, a menudo es en el contexto de caminar una matriz.

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

    La primera cosa que hacemos es inicializar un $index a 0., Luego agregamos la condición de que $indexdebe ser menor que $data.count. Finalmente, especificamos que cada vez que loop que me debe aumentar el índice por 1. En este caso $index++ es la abreviatura de $index = $index + 1.

    siempre que utilice un bucle for, preste especial atención a la condición. Usé $index -lt $data.count aquí. Es muy fácil obtener la condición ligeramente equivocada para obtener un apagado por un error en su lógica., El uso de $index -le $data.count o $index -lt ($data.count - 1) son siempre un poco mal. Eso causaría que su resultado procese demasiados o muy pocos elementos. Este es el clásico apagado por un error.

    Switch loop

    Este es uno que es muy fácil de pasar por alto. Si proporciona una matriz a una instrucción switch, coincidirá en cada elemento de la matriz.

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

    Esto se producirá la siguiente salida:

     Tick Tock Tick Tock

    Hay un montón de cosas interesantes como esta que podemos hacer con la instrucción switch., Tengo otro artículo dedicado a esto.

    • Todo lo que siempre quiso saber sobre la instrucción switch

    Actualizar valores

    Cuando su matriz es una colección de cadenas o enteros (tipos de valor), a veces querrá actualizar los valores en la matriz a medida que los recorre. La mayoría de los bucles anteriores usan una variable en el bucle que contiene una copia del valor. Si actualiza esa variable, el valor original de la matriz no se actualiza.

    la excepción a esa instrucción es el bucle for., Si desea recorrer una matriz y actualizar los valores dentro de ella, entonces el bucle for es lo que está buscando.

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

    Este ejemplo toma un valor por índice, hace algunos cambios y luego usa ese mismo índice para asignarlo de nuevo.

    Arrays of Objects

    hasta ahora, lo único que hemos colocado en un array es un tipo de valor, pero los arrays también pueden contener objetos.

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

    muchos cmdlets devuelven colecciones de objetos como matrices cuando se les asigna a una variable.,

     $processList = Get-Process

    Todas las funciones básicas que ya hemos hablado todavía se aplican a matrices de objetos con un par de detalles que vale la pena destacar.

    acceder a propiedades

    Podemos usar un índice para acceder a un elemento individual de una colección al igual que con los tipos de valor.

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

    podemos acceder y actualizar directamente a las propiedades.,

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

    propiedades de Matriz

    Normalmente, usted tendría que enumerar la totalidad de la lista como esta para tener acceso a todas las propiedades:

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

    O mediante el uso de la etiqueta Select-Object -ExpandProperty cmdlet.

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

    Pero PowerShell nos ofrece la posibilidad de solicitar LastName directamente. PowerShell los enumerará todos y nos dará una lista limpia.,

     PS> $data.LastName Marquette Doe

    La enumeración que aún pasa, pero no vemos la complejidad detrás de él.

    Where-Object filtering

    Aquí es donde Where-Object entra para que podamos filtrar y seleccionar lo que queremos de la matriz en función de las propiedades del objeto.

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

    se puede escribir que la misma consulta como esta, para obtener el FirstName estamos buscando.,

     $data | Where FirstName -eq Kevin

    Donde()

    las Matrices tienen un Where() método que le permite especificar un scriptblock para el filtro.

     $data.Where({$_.FirstName -eq 'Kevin'})

    Esta función fue añadida en PowerShell 4.0.

    actualizando objetos en bucles

    con tipos de valor, la única forma de actualizar la matriz es usar un bucle for porque necesitamos conocer el índice para reemplazar el valor. Tenemos más opciones con objetos porque son tipos de referencia., Aquí está un ejemplo rápido:

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

    Este bucle es caminar cada objeto en el $data array. Debido a que los objetos son tipos de referencia, la variable $person hace referencia al mismo objeto que está en la matriz. Así que las actualizaciones de sus propiedades actualizarán el original.

    todavía no se puede reemplazar todo el objeto de esta manera. Si intenta asignar un nuevo objeto a la variable $person, está actualizando la referencia de la variable a otra cosa que ya no apunta al objeto original en la matriz., Esto no va a funcionar como se esperaría:

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

    Operadores

    Los operadores en PowerShell también trabajo en las matrices. Algunos de ellos funcionan de manera ligeramente diferente.

    – join

    el operador -join es el más obvio, así que lo veremos primero. Me gusta el operador -join y lo uso a menudo. Unirá todos los elementos de la matriz con un carácter o cadena que especifique.,

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

    Una de las características por las que me gusta el -join operador es el que se encarga de los elementos individuales.

     PS> 1 -join '-' 1

    yo uso esta dentro y registro detallado de mensajes.

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

    -únete a $array

    Aquí es un truco que Lee Dailey señaló a mí., Si alguna vez quieren unir todo sin un delimitador, en vez de hacer esto:

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

    puede utilizar -join con la matriz como parámetro con ningún prefijo. Echa un vistazo a este ejemplo para ver que estoy hablando.

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

    -reemplazar y -split

    Los otros operadores como -replace y -split se va a ejecutar en cada elemento de la matriz. No puedo decir que alguna vez los haya usado de esta manera, pero aquí hay un ejemplo.,

     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

    contiene

    El -contains operador permite comprobar una matriz de valores para ver si contiene un valor especificado.

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

    en

    Cuando usted tiene un único valor que desea comprobar coincide con uno de varios valores, puede utilizar la etiqueta -in operador. El valor estaría a la izquierda y la matriz en el lado derecho de la operación.,

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

    Esto puede llegar a ser costosa si la lista es grande. A menudo utilizaré un patrón de expresiones regulares si estoy comprobando más 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 y -ne

    la Igualdad y matrices puede ser complicado. Cuando la matriz está en el lado izquierdo, cada elemento se comparará. En lugar de devolver True, devolverá el objeto que coincida.,

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

    Cuando se utiliza la etiqueta -ne operador, vamos a obtener todos los valores que no son iguales a nuestro valor.

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

    Cuando se utiliza este en un if() declaración, un valor que se devuelve es un True valor. Si no se devuelve ningún valor, es un valor False. Ambas instrucciones siguientes evaluarán a True.,

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

    voy a revisar esto en un momento en el que hablamos de la prueba de $null.

    -match

    el operador-match intentará hacer coincidir cada elemento de la colección.

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

    Cuando se utiliza la etiqueta -match con un solo valor de una variable especial $Matches rellena con la información de la partida. Este no es el caso cuando una matriz se procesa de esta manera.

    podemos tomar el mismo enfoque con Select-String.,

     $servers | Select-String SQL

    me tome una mirada más cercana a Select-String,-match y el $matches variable en otro post llamado muchas maneras de usar regex.

    Testing null o empty

    Testing for $null or empty arrays can be tricky. Aquí están las trampas comunes con matrices.

    de un vistazo, esta declaración parece que debería funcionar.

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

    Pero yo sólo fui cómo -eq comprueba cada elemento de la matriz., Así que podemos tener una matriz de varios elementos con un solo valor null null y evaluaría a $true

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

    Por Eso es una mejor práctica colocar el $null en el lado izquierdo de la operadora. Esto hace que este escenario no sea un problema.

     if ( $null -eq $array ) { 'Array actually is $null' }
    $null array no es la misma cosa como una matriz vacía. Si sabe que tiene una matriz, verifique el número de objetos en ella., Si la matriz es de $null, el recuento será 0.

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

    Hay una trampa más para ver fuera de aquí. Puede usar count incluso si tiene un solo objeto, a menos que ese objeto sea PSCustomObject. Se trata de un error corregido en PowerShell 6.1. Esa es una buena noticia, pero mucha gente todavía está en 5.1 y necesita tener cuidado con ella.

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

    Si usted todavía está en PowerShell 5.,1, puede envolver el objeto en una matriz antes de verificar el conteo para obtener un conteo preciso.

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

    completamente De jugar a lo seguro, verificación de $null, a continuación, comprobar el recuento.

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

    Todas -eq

    hace poco vi que alguien pregunte cómo comprobar que cada valor en una matriz coincide con un valor dado. El usuario /u/bis de Reddit tenía esta solución inteligente que comprueba si hay valores incorrectos y luego voltea el resultado.,

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

    Añadir a las matrices

    En este punto, usted está comenzando a preguntarse cómo agregar elementos a una matriz. La respuesta rápida es que no se puede. Una matriz es un tamaño fijo en la memoria. Si usted necesita para crecer o agregar un solo elemento, entonces usted necesita para crear una nueva matriz y copiar todos los valores de la vieja matriz. Esto suena caro y como mucho trabajo, sin embargo, PowerShell oculta la complejidad de crear la nueva matriz.

    Array addition

    Podemos utilizar el operador addition with arrays para crear un nuevo array., Así que, dado que estas dos matrices:

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

    podemos sumarlas para obtener una nueva matriz.

     PS> $first + $second Zero One Two Three

    Plus es igual a +=

    podemos crear una nueva matriz en su lugar y agregar un elemento como este:

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

    recuerde que cada vez que utilice += que se están duplicando y la creación de una nueva matriz. Esto no es un problema para conjuntos de datos pequeños, pero escala extremadamente pobremente.,

    asignación de canalización

    puede asignar los resultados de cualquier Canalización a una variable. Será una matriz si contiene varios elementos.

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

    normalmente cuando pensamos en usar la canalización, pensamos en los típicos one-liners de PowerShell. Podemos aprovechar la canalización con foreach() sentencias y otros bucles. Así que en lugar de agregar elementos a una matriz en un bucle, podemos soltar elementos en la canalización.,

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

    asignando los resultados delforeach a una variable, capturamos todos los objetos y creamos una sola matriz.

    tipos de matriz

    de forma predeterminada, se crea una matriz en PowerShell como un tipo ]. Esto le permite contener cualquier tipo de objeto o valor. Esto funciona porque todo se hereda del tipo PSObject.

    arrays fuertemente tipeados

    Puede crear un array de cualquier tipo usando una sintaxis similar., Cuando se crea una matriz con un tipo Fuerte, solo puede contener valores u objetos del tipo especificado.

    ArrayList

    agregar elementos a un array es una de sus mayores limitaciones, pero hay algunas otras colecciones a las que podemos recurrir que resuelven este problema.

    el ArrayList es comúnmente una de las primeras cosas en las que pensamos cuando necesitamos una matriz que sea más rápida de trabajar. Actúa como una matriz de objetos en cada lugar que la necesitamos, pero maneja la adición de elementos rápidamente.

    así es como creamos un ArrayList y le agregamos elementos.,

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

    Estamos llamando en .Net para obtener este tipo. En este caso estamos usando el constructor por defecto para crearlo. Luego llamamos al método Add para agregarle un elemento.

    la razón por la que estoy usando al principio de la línea es para suprimir el código devuelto. Algunas llamadas a. net harán esto y pueden crear resultados inesperados.

    si los únicos datos que tiene en su matriz son cadenas, también eche un vistazo a usar StringBuilder., Es casi lo mismo, pero tiene algunos métodos que son solo para tratar con cadenas. El StringBuilder está especialmente diseñado para el rendimiento.

    • concatenar cadenas usando StringBuilder

    es muy común ver a las personas moverse a ArrayList desde matrices. Pero viene de una época en la que C# no tenía soporte genérico., El ArrayList se depreció en soporte para el genérico List

    lista genérica

    un tipo genérico es un tipo especial en C# que define una clase generalizada y el usuario especificará los tipos de datos que usará cuando se cree. Por lo tanto, si desea una lista de números o cadenas, definiría que desea una lista de tipos int o string.

    Aquí se muestra cómo crear una lista para cadenas.

     $mylist = ]::new()

    O una lista de números.,

     $mylist = ]::new()

    Nos puede echar una matriz existente a una lista como esta sin crear el objeto en primer lugar:

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

    podemos acortar la sintaxis un poco con la etiqueta using namespace declaración en PowerShell 5 y posteriores. La instrucción using debe ser la primera línea de su script. Al declarar un espacio de nombres, PowerShell le permitirá dejarlo fuera de los tipos de datos cuando haga referencia a ellos.,

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

    Esto hace que el List mucho más utilizable.

    Tiene un método similarAdd disponible para usted. A diferencia de ArrayList, no hay valor de retorno en el método Add por lo que no tenemos que void.

     $myList.Add(10)

    Y todavía podemos acceder a los elementos como otras matrices.,

     PS> $myList 10

    Lista

    Usted puede tener una lista de cualquier tipo, pero cuando no se sabe el tipo de los objetos, puede usar ] para que los contienen.

     $list = ]::new()

    Remove()

    El ArrayList y el genérico List tanto el apoyo de la eliminación de elementos de la colección.

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

    Cuando se trabaja con tipos de valor, se retire el primero de la lista., Puede llamarlo una y otra vez para seguir eliminando ese valor. Si tiene tipos de referencia, debe proporcionar el objeto que desea eliminar.

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

    quitar El método devolverá true si era capaz de encontrar y quitar el elemento de la colección.

    más colecciones

    hay muchas otras colecciones que se pueden utilizar, pero estos son los buenos reemplazos de matriz genérica., Si está interesado en aprender más sobre estas opciones, eche un vistazo a esta esencia que Mark Kraus elaboró.

    otros matices

    ahora que he cubierto todas las funciones principales, aquí hay algunas cosas más que quería mencionar antes de terminar esto.

    arrays Pre-dimensionados

    he mencionado que no se puede cambiar el tamaño de un array una vez que se crea. Podemos crear una matriz de un tamaño predeterminado llamándola con el constructor new($size).,

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

    la Multiplicación de matrices

    Un poco interesante truco es que usted puede multiplicar una matriz por un número entero.

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

    Inicializa con 0

    Un escenario común es la que desea crear una matriz con ceros. Si solo vas a tener enteros, una matriz de enteros fuertemente tipeada por defecto será todos los ceros.

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

    podemos utilizar la multiplicación truco para hacer esto también.,

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

    La cosa buena acerca de la multiplicación truco es que usted puede utilizar cualquier valor. Así que si prefieres tener 255 como valor predeterminado, esta sería una buena manera de hacerlo.

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

    matrices Anidadas

    Una matriz dentro de una matriz se denomina matriz anidada. No los Uso mucho en PowerShell, pero los he usado más en otros idiomas. Considere usar una matriz de matrices cuando sus datos quepan en un patrón similar a una cuadrícula.

    Aquí hay dos formas en que podemos crear una matriz de 2 dimensiones.,

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

    La coma es muy importante en esos ejemplos. Di un ejemplo anterior de una matriz normal en múltiples líneas donde la coma era opcional. Ese no es el caso con una matriz multidimensional.

    la forma en que usamos la notación de índice cambia ligeramente Ahora que tenemos una matriz anidada. Usando el $data anterior, así es como accederíamos al valor 3.

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

    Añadir un conjunto de soporte para cada nivel de la matriz de anidación., El primer conjunto de corchetes es para la matriz más externa y luego trabaja su camino desde allí.

    Write-Output-NoEnumerate

    a PowerShell le gusta desenvolver o enumerar matrices. Este es un aspecto central de la forma en que PowerShell utiliza la canalización, pero hay ocasiones en las que no desea que eso suceda.

    normalmente Canalizo objetos aGet-Member para obtener más información sobre ellos. Cuando Canalizo una matriz a ella, se desenvuelve y Get-Member ve los miembros de la matriz y no la matriz real.,

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

    Para evitar que se desenvuelva de la matriz, puede usar Write-Object -NoEnumerate.

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

    tengo una segunda forma de hacer esto es más de un hack (y yo trato de evitar los hacks como este). Puede colocar una coma delante de la matriz antes de canalizarla.

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

    devuelve un array

    Este desenredado de arrays también ocurre cuando se generan o devuelven valores desde una función., Todavía puede obtener una matriz si asigna la salida a una variable, por lo que esto no es un problema común.

    el problema es que tendrá una nueva matriz. Si que es un problema, puede usar Write-Output -NoEnumerate $array o return ,$array para trabajar alrededor de ella.

    ¿Algo más?

    sé que todo esto es mucho para asimilar. Mi esperanza es que aprenderás algo de este artículo cada vez que lo leas y que resultará ser una buena referencia para ti durante mucho tiempo., Si usted encontró esto para ser útil, por favor compártalo con otros que usted piensa que obtendrá valor de ella.

    desde aquí, te recomiendo que eches un vistazo a un post similar que escribí sobre los hashtables.

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *