Ra_, il 07/12/2008 - 17:01, ha scritto:
ho un array in forma di matrice
[[a,789,c,d],[a1,790,c1,d1],[a2,-30,c2,d2]];
devo ordinarlo secondo la grandezza del numero:
[[a2,-30,c2,d2],[a,789,c,d],[a1,790,c1,d1]];
non so quindi come usare la funzione array.isort/array.sort (mi dà errore perchè lavora soltanto con numeri o stringhe).
Probabilmente sono fuori tempo massimo! ma quando avete formulato detta domanda non bazzicavo ancora in Nokioteca...
Ufff! il solito pedante rompi b... Probabilmente Alter ha ragione...comunque,
TITOLO:
A volte incasinarsi conviene!
Quanto sopra esposto va tutto bene, che sia il Bubble Sort, il Quick Sort, o altro ma solo se la matrice è composta da pochi elementi,
Per ordinare una matrice di 32000 elementi (o più) in mShell ci vuole mooolto tempo, è il limite di questi linguaggi.
Ogni volta che compie un ciclo di ordinamento l'interprete esegue una marea di verifiche per assicurarsi che non stiamo commettendo cavolate.
In questo caso ci vorrebbe un ordinatore scritto in C++ che non perde tempo in verifiche e se fatto da professionisti è in grado
di applicare l'algoritmo di ordinamento più idoneo e altri trucchi vari.
Già e dove lo pesco quel ordinatore? .array.isort A grullo! mo me fai vedè tu ad usarlo. Alter è inutile che insisti come dice "Ra_" non la si può usare direttamente su questo 'array
a=[['a',789,'c','d'],['a1',790,'c1','d1'],['a2',-30,'c2','d2']]; ma...... su questo sì
b=[789,790,-30];.
use array
b=[];
a=[['a',789,'c','d'],['a1',790,'c1','d1'],['a2',-30,'c2','d2']]; // il nostro array
// crea l'array b[] contenente solo i numeri interessati all'ordinamento
for c=0 to len(a)-1 do
.append(b,a[c][1]);
end;
// eseguo l'ordinamento alla velocità della luce e assegno sempre a b[] non i numeri 789,790,-30 ma il loro ordine di precedenza
b=array.isort(b);
// a questo punto abbiamo una matrice indice sfruttabile per stampare i valori di a[] in ordine
for c=0 to len(a)-1 do
print(a[b[c]][1]);
end;
// oppure possiamo trasferire in un altra matrice tutti i valori di a[] ma ordinati
d=[];
for c=0 to len(a)-1 do
append(d,a[b[c]]);
end;
print d
Tutto questo crea e disfa può sembrare molto lento ma non è così. (Provare per credere.)
Spero di non aver annoiato nessuno...e se qualcuno conosce trucchi più potenti.....
Urka! era ora finalmete potrò gestire in modo veloce l'elenco delle mie sfinzie... Magari fossero così tante Alter...Magari...