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.