es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Sumando un array de objetos en Powershell.

Tengo una matriz de objetos que contienen valores enteros.

$row = new-Object PSObject # crear un nuevo objeto para contener sus datos
$row | Add-Member -Name “sheet_number” -MemberType NoteProperty -Value 1
$row | Add-Member -Name “frame_number” -MemberType NoteProperty -Value 2
$row | Add-Member -Name “sheet_height” -MemberType NoteProperty -Value 1200
$row | Add-Member -Name “frame_height” -MemberType NoteProperty -Value 1200
$row | Add-Member -Name “frame_width” -MemberType NoteProperty -Value 3300
$row | Add-Member -Name “orientation” -MemberType NoteProperty -Value 0
$frames += $row

Esto está en un bucle for destinado a iterar varias veces. Pero la propiedad sheet_number solo debería tener un par de valores. Lo que necesito es sumar los valores en frame_width donde sheet_number es el mismo.

Pseudo código:

sheet_width = suma de frame_width donde sheet number = 1

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para lograr esto, se puede utilizar el cmdlet Where-Object para filtrar los marcos que coinciden con el número de hoja deseado y luego utilizar el cmdlet Measure-Object para sumar sus valores de ancho de marco. El código de PowerShell para esto sería:

    # Inicializar el número de hoja y el arreglo de marcos.
    $sheet_number = 1
    $frames = @()
    
    # Agregar marcos al arreglo usando un bucle.
    for ($i=0; $i -lt 10; $i++) {
        $row = New-Object PSObject
        $row | Add-Member -Name "sheet_number" -MemberType NoteProperty -Value (($i % 3) + 1)
        $row | Add-Member -Name "frame_number" -MemberType NoteProperty -Value $i     
        $row | Add-Member -Name "sheet_height" -MemberType NoteProperty -Value 1200         
        $row | Add-Member -Name "frame_height" -MemberType NoteProperty -Value 1200    
        $row | Add-Member -Name "frame_width"  -MemberType NoteProperty -Value (($i % 4) + 1) 
        $row | Add-Member -Name "orientation"  -MemberType NoteProperty -Value 0 
        $frames += $row
    }
    
    # Sumar los valores de ancho de marco donde el número de hoja = $sheet_number
    $sheet_width = ($frames | Where-Object { $_.sheet_number -eq $sheet_number } | Measure-Object -Property frame_width -Sum).Sum
    
    # Resultado
    "El ancho de la hoja $sheet_number es $sheet_width"
    

    En este ejemplo, he agregado 10 marcos al arreglo $frames mediante un bucle, con 3 números de hoja diferentes y marcos de ancho variable. Luego, he establecido $sheet_number en 1 para filtrar los marcos solo con ese número de hoja.

    Para sumar los valores de ancho de marco para los marcos seleccionados, he utilizado Where-Object para filtrar los marcos en función de su propiedad de número de hoja y luego he enviado el resultado a Measure-Object con el parámetro -Property establecido en frame_width y -Sum para calcular la suma.

    Finalmente, he obtenido el resultado como una cadena que incluye el número de hoja y su ancho correspondiente.

Comments are closed.