mercoledì 13 gennaio 2016

Scambiare righe con colonne

Immaginate di avere una lista del tipo:

1,2,3
4,5,6
7,8,9

e vorreste scambiare le righe con le colonne per ottenere questo:

1,4,7
2,5,8
3,6,9

Esistono vari modi per farlo in livecode, ecco il mio codice:


function trasponi lista
   set columndel to comma
   split lista by column
   repeat for each element tElem in lista
      repeat for each line tLine in tElem
         put tLine & comma after lista2
      end repeat
      delete last char of lista2
      put return after lista2
   end repeat
   return lista2
end trasponi


E voi riuscite a trovare un codice ancora più veloce?

2 commenti:

  1. Ciao,
    ho notato che se al posto di 3X3 crei una tabella 12X12 l'ordine dei numeri è errato.
    Partendo da questa tabella:
    1,2,3,4,5,6,7,8,9,10,11,12
    13,14,15,16,17,18,19,20,21,22,23,24
    25,26,27,28,29,30,31,32,33,34,35,36
    37,38,39,40,41,42,43,44,45,46,47,48
    49,50,51,52,53,54,55,56,57,58,59,60
    61,62,63,64,65,66,67,68,69,70,71,72
    73,74,75,76,77,78,79,80,81,82,83,84
    85,86,87,88,89,90,91,92,93,94,95,96
    97,98,99,100,101,102,103,104,105,106,107,108
    109,110,111,112,113,114,115,116,117,118,119,120
    121,122,123,124,125,126,127,128,129,130,131,132
    133,134,135,136,137,138,139,140,141,142,143,144

    La tua funziona la converte così:
    1,13,25,37,49,61,73,85,97,109,121,133,
    10,22,34,46,58,70,82,94,106,118,130,142,
    11,23,35,47,59,71,83,95,107,119,131,143,
    12,24,36,48,60,72,84,96,108,120,132,144,
    2,14,26,38,50,62,74,86,98,110,122,134,
    3,15,27,39,51,63,75,87,99,111,123,135,
    4,16,28,40,52,64,76,88,100,112,124,136,
    5,17,29,41,53,65,77,89,101,113,125,137,
    6,18,30,42,54,66,78,90,102,114,126,138,
    7,19,31,43,55,67,79,91,103,115,127,139,
    8,20,32,44,56,68,80,92,104,116,128,140,
    9,21,33,45,57,69,81,93,105,117,129,141,

    Saluti,
    Paolo

    RispondiElimina
  2. Hai ragione, io di solito usavo dei cicli, ma su un forum ho trovato un codice più veloce, ma sbagliato... L'errore è che ordina le righe prima di riscriverle, quindi si perde l'ordine corretto delle righe.
    Ora ho messo un mio vecchio codice corretto. Grazie!
    Se hai un codice migliore, pubblicalo pure

    RispondiElimina