Búsqueda de sitios web

Comparar matrices en PowerShell [4 formas]


En esta publicación, veremos cómo comparar matrices en PowerShell.

PowerShell admite matrices con una o más dimensiones y de cero a muchos elementos en cada dimensión. Los elementos dentro de una dimensión se numeran desde 0 en orden entero ascendente. Además, el operador de subíndice de matriz [] permite el acceso a cualquier elemento en particular. PowerShell se puede utilizar de diversas formas para comparar matrices. A continuación se presentan algunos de ellos.

Comparar matrices de cadenas

Si tiene dos matrices que contienen cadenas, podemos compararlas con PowerShell de una de las formas más sencillas posibles. Podemos comparar las cadenas en las matrices de diferentes maneras cuando nos encontramos en esta situación; A continuación se muestran algunos métodos para comparar matrices de cadenas.

  • Usando el cmdlet Where-Object con el operador in
  • Uso del cmdlet Compare-Object
  • Usando el operador -contains
  • Usando el operador -in

Utilice el cmdlet Where-Object con el operador in

Utilice el cmdlet Where-Object para comparar matrices en PowerShell.

Utilice el cmdlet Where-Object:

$array1 = "Monday", "Tuesday", "Wednesday", "Thursday"
$array2 = "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"
$array1 | Where-Object -FilterScript { $_ -in $array2 }

PRODUCCIÓN :

Wednesday
Thursday

El único propósito del cmdlet Where-Object de PowerShell era filtrar la salida de un comando para que solo se devuelvan los datos que desea. Un bloque de script es una función anónima. Por lo tanto, usaría el parámetro -FilterScript para emplear un bloque de script como filtro. Este parámetro le permite escribir un bloque de secuencia de comandos, que luego se puede pasar al FilterScript y ejecutarse en el cmdlet where-object.

El operador -in significa que el valor está en una colección y devuelve el valor de la propiedad si se encuentra una coincidencia. La variable de canalización $_ es una variable particular en PowerShell que se utiliza para representar el objeto actual. Entonces obtuvimos la salida Wednesday y Thursday de ambas matrices donde se encontró la coincidencia.

Utilice el cmdlet Compare-Object

Utilice el cmdlet Compare-Object para comparar matrices en PowerShell. El cmdlet Compare-Object compara dos conjuntos de objetos. Un conjunto de objetos es la referencia y el otro conjunto de objetos es la diferencia.**

Utilice el cmdlet Comparar objetos:

$array1 = "Monday", "Tuesday", "Wednesday", "Thursday"
$array2 = "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"
Compare-Object -ReferenceObject $array1 -DifferenceObject $array2

PRODUCCIÓN :

InputObject SideIndicator
----------- -------------
Friday      =>
Saturday    =>
Sunday      =>
Monday      <=
Tuesday     <=

Usamos el cmdlet Compare-Object en PowerShell para comparar las matrices especificadas. Mediante un -ReferenceObject y un DifferenceObject, este cmdlet puede determinar qué elementos están presentes en cada matriz y cuáles no. => es la propiedad SideIndicator que indica que la propiedad InputObject devuelta está en el valor DifferenceObject en lugar del ReferenceObject valor, mientras que <= significa lo contrario.

Utilice el operador -Contains

Utilice el operador -Contains para comprobar si la cadena especificada forma parte de la otra matriz en PowerShell.

Uso -Contiene Operador:

$array = @('potato', 'onion', 'peas', 'carrot')
$array -contains 'onion'

PRODUCCIÓN :

True

El operador -Contains de PowerShell le permite determinar si un elemento forma parte de una colección. Aunque el operador -Contains no entiende las colecciones de forma predeterminada, puedes escribir código para que funcione como deseas. PowerShell puede usar este operador para verificar un solo elemento en una matriz. Devuelve True si está presente en la matriz; de lo contrario, devuelve False.

Creemos dos matrices para verificar las cadenas de comando de ambas matrices.

Uso -Contiene Operador:

$array1 = @('potato', 'onion', 'carrot')
$array2 = @('peas', 'cauliflower', 'potato')
$array1 | ForEach-Object {
    if ($array2 -contains $_) {
        Write-Host "<code>$array2 has the </code>$array1 string [$_]"
    }
}

PRODUCCIÓN :

$array2 has the $array1 string [potato]

El cmdlet ForEach-Object opera en cada elemento de una colección de objetos de entrada. Los objetos de entrada también se pueden canalizar al cmdlet o especificar mediante el parámetro InputObject. Lo usamos para iterar sobre array1. Usamos la declaración if con el operador -contains para cada iteración para verificar si array2 también tiene ese elemento. Si es así, utilizamos el cmdlet Write-Host para imprimir la salida personalizada, como se muestra arriba.

Utilice el operador -in con ForEach-Object

Utilice el operador -in para comprobar si la cadena especificada forma parte de la otra matriz en PowerShell.

Usar operador -in:

$array1 = @('potato', 'onion', 'carrot')
$array2 = @('peas', 'cauliflower', 'potato')
$array1 | ForEach-Object {
    if ($_ -in $array2) {
        Write-Host "<code>$array2 has the </code>$array1 string [$_]"
    }
}

PRODUCCIÓN :

$array2 has the $array1 string [potato]

Este código es similar al ejemplo anterior pero utiliza el operador -in para este código, que es equivalente al operador -contains pero tiene la sintaxis opuesta. La matriz se definió en el lado izquierdo cuando se usó el operador -contains. Esta vez, la matriz se especifica en el lado derecho usando el operador -in, como se ve arriba.

Comparar matrices de objetos personalizados

Utilice Compare-Object para comparar una matriz de objetos personalizados. El cmdlet Compare-Object compara dos conjuntos de objetos. Un conjunto de objetos es la referencia y el otro conjunto de objetos es la diferencia.

Utilice el cmdlet Where-Object:

$ArrayObject1 = @(
[PSCustomObject]@{Name = "John"; Age = 30},
[PSCustomObject]@{Name = "Martin"; Age = 25}
)

$ArrayObject2 = @(
[PSCustomObject]@{Name = "John"; Age = 30},
[PSCustomObject]@{Name = "Sam"; Age = 40}
)

Compare-Object -ReferenceObject $ArrayObject1 -DifferenceObject $ArrayObject2 -Property Name, Age

PRODUCCIÓN :

Name Age SideIndicator
---- --- -------------
Name   Age SideIndicator
----   --- -------------
Sam     40 =>
Martin  25 <=

El código anterior le proporcionará la diferencia entre dos matrices.
<= denota si el elemento solo está presente en ReferenceObject
=> denota si el elemento solo está presente en DifferenceObject

Se trata de cómo comparar matrices en PowerShell.

Artículos relacionados