Transponer un array

Post Reply
User avatar
jose_murugosa
Posts: 1185
Joined: Mon Feb 06, 2006 4:28 pm
Location: Uruguay
Contact:

Transponer un array

Post by jose_murugosa »

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
"Los errores en programación, siempre están entre la silla y el teclado y la IA!!"
User avatar
cnavarro
Posts: 6557
Joined: Wed Feb 15, 2012 8:25 pm
Location: España
Been thanked: 3 times

Re: Transponer un array

Post by cnavarro »

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
JoseAlvarez
Posts: 810
Joined: Sun Nov 09, 2014 5:01 pm

Re: Transponer un array

Post by JoseAlvarez »

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
jose_murugosa
Posts: 1185
Joined: Mon Feb 06, 2006 4:28 pm
Location: Uruguay
Contact:

Re: Transponer un array

Post by jose_murugosa »

Lo he resuelto así:

Code: Select all | Expand

//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
"Los errores en programación, siempre están entre la silla y el teclado y la IA!!"
User avatar
cmsoft
Posts: 1297
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina
Been thanked: 2 times

Re: Transponer un array

Post by cmsoft »

Jose:
Existe la funcion ArrTranspose
(Sacado de Wiki de fivewin)

Code: Select all | Expand

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
jose_murugosa
Posts: 1185
Joined: Mon Feb 06, 2006 4:28 pm
Location: Uruguay
Contact:

Re: Transponer un array

Post by jose_murugosa »

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
"Los errores en programación, siempre están entre la silla y el teclado y la IA!!"
Post Reply