como acumulo los valores de array?

como acumulo los valores de array?

Postby goosfancito » Fri Dec 10, 2021 9:03 pm

Hola.
necesito acumular los valores de una columna de un array y ponerlos en la posicion de otro array, esto no me funciona:
Code: Select all  Expand view
     aTotales[ 1 ] := AScan( aDatos, { | o | nAcum := nAcum + o[ 1 ]  } )
      aTotales[ 2 ] := AScan( aDatos, { | o | nAcum := nAcum + o[ 2 ]  } )
 


en cambio esto si, pero no me gusta como queda codificado.
Code: Select all  Expand view
nAcum:=  AScan( aDatos, { | o | nAcum := nAcum + o[ 1 ]  } )
aTotales[1]:= nACum; nAcum:= 0

nAcum:=  AScan( aDatos, { | o | nAcum := nAcum + o[ 2]  } )
aTotales[2]:= nACum; nAcum:= 0
FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
User avatar
goosfancito
 
Posts: 1954
Joined: Fri Oct 07, 2005 7:08 pm

Re: como acumulo los calores de array?

Postby Enrico Maria Giordano » Sat Dec 11, 2021 8:47 am

goosfancito wrote:Hola.
necesito acumular los valores de una columna de un array y ponerlos en la posicion de otro array, esto no me funciona:
Code: Select all  Expand view
     aTotales[ 1 ] := AScan( aDatos, { | o | nAcum := nAcum + o[ 1 ]  } )
      aTotales[ 2 ] := AScan( aDatos, { | o | nAcum := nAcum + o[ 2 ]  } )
 


Code: Select all  Expand view
aTotales[ 1 ] = 0
aTotales[ 2 ] = 0

AEval( aDatos, { | o | aTotales[ 1 ] += o[ 1 ], aTotales[ 2 ] += o[ 2 ]  } )


EMG
User avatar
Enrico Maria Giordano
 
Posts: 8315
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia

Re: como acumulo los valores de array?

Postby xmanuel » Tue Dec 14, 2021 10:05 am

Al estilo tradicional, más rápido porque no se evalúa ningún codeblock

Code: Select all  Expand view

local aTotales := { 0, 0 }
local n := len( aDatos )
local i

for i := 1 to n
    aTotales[ 1 ] += aDatos[ i, 1 ]
    aTotales[ 2 ] += aDatos[ i, 2 ]
next  
 
______________________________________________________________________________
Sevilla - Andalucía
xmanuel
 
Posts: 756
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla

Re: como acumulo los valores de array?

Postby Enrico Maria Giordano » Wed Dec 15, 2021 8:32 pm

Did you make any comparative speed test?

ENG
User avatar
Enrico Maria Giordano
 
Posts: 8315
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia

Re: como acumulo los valores de array?

Postby xmanuel » Thu Dec 16, 2021 10:39 am

No con este ejemplo...
Pero si he hecho pruebas en su día.
En funciones críticas yo usaría el método tradicional que propongo. En otras circunstancias sería cuestión de gustos.

Los codeblock al ser un tipo de dato se pueden pasar como parámetros de funciones lo cual le da muchísima potencia a nuestros programas.
Fue una revolución el cambio de la macrocompilación por codeblocks.

En la época en que se creó el tipo de dato CodeBlock había muy pocos lenguajes que lo tuvieran... desde hace relativamente poco tiempo otros lenguajes lo han incorporado con el nombre de "Closures" o "funciones anónimas".
Pero incluso ahora con el uso de la clase Symbol se pueden hacer cosas muy chulas:
Code: Select all  Expand view

PROCEDURE Main()

   LOCAL oSym := Symbol():New( "QOUT" )

   ? "Now test the :Exec() method"

   oSym:Exec( "This string is being printed by QOUT" )
   oSym:Exec( "which is being invoked by the :Exec()" )
   oSym:Exec( "method in the Symbol class." )

   ?
   ? "symbol name: ", oSym:name

   ? "Comparing QOut symbol with xOut symbol"
   ? oSym:IsEqual( Symbol():New( "xOut" ) )

   ? "done!"
   ?

   RETURN
 


Y el no va mássssssssssss podemos usar punteros a funciones, lo cual va un paso más allá de los codeblocks:

Code: Select all  Expand view


procedure main()

    local pFunc := @alert()
   
    pFunc:exec( "Esto es una prueba de puntero a la funcion Alert()" )

    Alert( pFunc:name() ) // Devuelve el nombre de la funcion apuntada
   
    pFunc := @upper()

    pruebaPuntero( pFunc ) // Llama a una funcion pasando un puntero a funcion

 return

 procedure pruebaPuntero( p )

    alert( p:exec( "esto lo veras en mayusculas" ) )

 return
 
 


Harbour tiene muchos secretos que lo convierten en un lenguaje super potente y de futuro...
Te imaginas Harbour en la web?

Pues eso es posible con Mod_Harbour!!!
______________________________________________________________________________
Sevilla - Andalucía
xmanuel
 
Posts: 756
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 76 guests