Saltar al contenido

Usando Powershell, ¿cómo puedo contar la aparición de cada elemento en un array?

Nuestro team de especialistas despúes de días de trabajo y recopilación de de información, dimos con la solución, esperamos que resulte útil para ti para tu proyecto.

Solución:

Puedes usar el Group-Object cmdlet:

PS> 1,1,1,2,2,3,4,4,4,4,5,5 | group

Count Name                      Group
----- ----                      -----
    3 1                         1, 1, 1
    2 2                         2, 2
    1 3                         3
    4 4                         4, 4, 4, 4
    2 5                         5, 5

Si desea una tabla hash para los elementos y sus recuentos, solo necesita un poco ForEach-Object después de:

$array | group | %  $h = @   $h[$_.Name] = $_.Count   $h 

Puede ajustar la salida y formatearla como desee:

PS> $ht= 1,1,1,2,2,3,4,4,4,4,5,5 | Group-Object -AsHashTable -AsString
PS> $ht

Name                           Value
----                           -----
2                              2, 2
4                              4, 4, 4, 4
5                              5, 5
1                              1, 1, 1
3                              3


PS> $ht['1']
1
1
1

La útil respuesta de Joey proporciona el indicador crucial: utilizar el Group-Object cmdlet para agrupar objetos de entrada por igualdad.

(Para agruparlos por uno o más de sus valores de propiedad en cambio, usa -Property).

Group-Object salidas [Microsoft.PowerShell.Commands.GroupInfo] objetos que representan cada uno grupo de objetos de entrada iguales, cuyas propiedades destacables son:

  • .Values … el(los) valor(es) que definen al grupo, como [System.Collections.ArrayList] instancia (que acaba de 1 elemento en el caso que nos ocupa, ya que los objetos de entrada como un todo se utilizan para formar los grupos).

  • .Count … el recuento de objetos en ese grupo.

Si, como en este caso, no hay necesidad de reunir a los miembros individuales del grupo como parte de cada grupo,
-NoElement se puede utilizar para la eficiencia.

Puede seguir procesando los objetos de grupo según sea necesario; para obtener el formato de salida específico estipulado en su pregunta, puede usar Select-Object con una propiedad calculada.

Para ponerlo todo junto:

PS> 1, 1, 1, 2, 2, 3, 4, 4, 4, 4, 5, 5 | Group-Object -NoElement |
      Select-Object @ n='Element:Count'; e= '0:1' -f $_.Values[0], $_.Count  

Element:Count
-------------
1:3
2:2
3:1
4:4
5:2

valoraciones y comentarios

Si te sientes incitado, tienes la libertad de dejar un ensayo acerca de qué te ha parecido esta reseña.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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