Transponer un array

Transponer un array

Postby jose_murugosa » Wed Apr 12, 2023 1:56 pm

Me gustaría saber como se puede de una manera sencilla transponer un array.
Estuve probando con la clase FW_Matrix pero no la he entendido bien porque no logro transponerlo.
Seguramente se debe a mi torpeza. :roll:
Saludos/Regards,
José Murugosa
FWH + Harbour + Bcc7. Una seda!
User avatar
jose_murugosa
 
Posts: 1145
Joined: Mon Feb 06, 2006 4:28 pm
Location: Uruguay

Re: Transponer un array

Postby cnavarro » Wed Apr 12, 2023 3:06 pm

Jose, busca en el foro ArrTranspose
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6504
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Transponer un array

Postby JoseAlvarez » Wed Apr 12, 2023 3:13 pm

Hola Jose,

Si lo que deseas es hacer una copia exacta del arreglo, yo uso aClone()

aArray1:=aClone(aArray2)

Espero que se lo que necesitas.
"Los errores en programación, siempre están entre la silla y el teclado..."

Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin

Carora, Estado Lara, Venezuela.
User avatar
JoseAlvarez
 
Posts: 752
Joined: Sun Nov 09, 2014 5:01 pm

Re: Transponer un array

Postby jose_murugosa » Wed Apr 12, 2023 6:32 pm

Lo he resuelto así:
Code: Select all  Expand view

//Permite trasponer cualquier array o matriz dado.
FUNCTION TransponerMatriz( aDatos )
     local aRet:={}, nRow, nCol, nRows, nCols
     nRows := Len( aDatos )
     nCols := Len( aDatos[1] )
     aRet  := Array( nCols, nRows ) //array en blanco con estructura transpuesta.

     FOR nRow = 1 to nRows
          FOR nCol = 1 to nCols
               aRet[ nCol, nRow ] := aDatos[ nRow, nCol ]
          NEXT nCol
     NEXT nRow

return aRet

 


Gracias a todos por sus comentarios.
Saludos/Regards,
José Murugosa
FWH + Harbour + Bcc7. Una seda!
User avatar
jose_murugosa
 
Posts: 1145
Joined: Mon Feb 06, 2006 4:28 pm
Location: Uruguay

Re: Transponer un array

Postby cmsoft » Thu Apr 13, 2023 10:02 am

Jose:
Existe la funcion ArrTranspose
(Sacado de Wiki de fivewin)
Code: Select all  Expand view
function ArrTranspose( aArray, lSquare )
local nRows, nCols, nRow, nCol, nWidth
   local aNew

   DEFAULT lSquare := .f.

   nRows          := Len( aArray )
   if lSquare
      nCols       := Len( aArray[ 1 ] )
   else
      nCols       := 1
      for nRow := 1 to nRows
         if ValType( aArray[ nRow ] ) == 'A'
            nCols    := Max( nCols, Len( aArray[ nRow ] ) )
         endif
      next
   endif

   aNew           := Array( nCols, nRows )
   for nRow := 1 to nRows
      if ValType( aArray[ nRow ] ) == 'A'
         nWidth  := Len( aArray[ nRow ] )
         for nCol := 1 to nWidth
            aNew[ nCol, nRow ]   := aArray[ nRow, nCol ]
         next
      else
         aNew[ 1, nRow ]      := aArray[ nRow ]
      endif
   next

return aNew
 
User avatar
cmsoft
 
Posts: 1204
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Transponer un array

Postby jose_murugosa » Thu Apr 13, 2023 11:53 am

Muchas Gracias César!!!

Parece que refabriqué la rueda :D

La verdad desconocía esta función.

Eres muy Amable, Saludos!!
Saludos/Regards,
José Murugosa
FWH + Harbour + Bcc7. Una seda!
User avatar
jose_murugosa
 
Posts: 1145
Joined: Mon Feb 06, 2006 4:28 pm
Location: Uruguay


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 37 guests