Newsgroup: it.comp.lang.javascript
Titolo: Ordinamento (no metodo sort)

Vorrei ordinare un array, magari copiando i valori in un altro perchč non
posso usare il metodo sort.
Qualcuno ha idea di come posso organizzare un ciclo, in modo che ad esempio
del primo array, memorizzi i valori ordinati in un altro?
O meglio ancora, ordini nell'altro gli indici, ma in base ai valori.
Cosě avrei nel secondo array la lista degli indici ordinati (in modo
decrescente mi servirebbe, ma penso sia simile)
Grazie mille.
+++
Io avevo provato con questo codice, ma niente da fare
//credo un array temporaneofor (i=0;i<squadra.length;i++) {
		elencotemp[i]=false;
	}
	massimo=-1;
	for (p=0;p<squadra.length;p++) {
		for (y=0;y<elencotemp.length;y++) {
			if (punti[y]>=massimo && elencotemp[y]==false) {
			campione=y;
			massimo=punti[campione];
			elencotemp[y]=true; // cosě non la controlla nei prossimi cicli
			}
		}
		elencofinale[p]=y;
	}// visualizzo la lista ordinata dei valori
	for (m=0;m<elencotemp.length;m++) {
		document.output.classifica.value+=squadra[elencofinale[m]];
	}

 posso usare il metodo sort.
Perche' non puoi usarlo?
Puoi sempre duplicare l'array di partenza, e ordinare il duplicato in modo
da non intaccare la fonte:
var ordArr=yourArray.slice().sort();
Un paio di note:
- Si presuppone che i valori dell'array siano di tipo "primitivo" (string,
number, boolean) e non siano oggetti.
- Questo codice non funziona su IE5 "puro", perche' non possiede il metodo
slice; in quel caso o ti cicli tutti gli elementi copiandoli nel nuovo
array, oppure se sono tutti di tipo string o number fai un eval di un join.
Nel caso di array di numeri:
var ordArray=eval("ordArray=["+yourArray.join(",")+"]");
Nel caso di array di stringhe:
var ordArray=eval("ordArray=[\""+yourArray.join("\",\"")+"\"]");
e poi sempre il sort() finale su ordArray.
Altrimenti, per carita', puoi sempre utilizzare algoritmi di ordinamento
tipo quicksort, su google ne troverai a bizzeffe di informazioni e
implementazioni.
-- 
ZER0
~ The Tangent Universe collapsed 5919 days, 2 hours, 41 minutes and 44 seconds ago.

 array, oppure se sono tutti di tipo string o number fai un eval di un join.
Sei sicurissimo? Secondo me funziona...non è che ti sei confuso con
splice()?
-- 
"E' l' ignoranza che crea l'intolleranza
 di gente cieca e senza coscienza"
									  S.S.S.

 
Se non ricordo male l'algoritmo che hai usato si chiama bubble sort.
Ciao.
	-Ema-

 splice()?
Hai ragione, mi sono confuso con splice().
-- 
ZER0
~ The Tangent Universe collapsed 5919 days, 3 hours, 2 minutes and 49 seconds ago.

 *Hai ragione*, mi sono confuso con splice().
QUESTA LA INCORNICIO IN BACHECA!!  :-)


 QUESTA LA INCORNICIO IN BACHECA!!  :-)
Perche'? Mica e' la prima volta che mi sbaglio, soprattutto di prima
mattina o di tarda notte ;)
-- 
ZER0
~ The Tangent Universe collapsed 5919 days, 3 hours, 6 minutes and 58 seconds ago.

 mattina o di tarda notte ;)
In realtà è il "Hai ragione" così, senza "ma" "però" che mi ha stupito, non
è da te!    :-)
-- 
"Emancipate yourselves from mental slavery;
None but ourselves can free our minds"
									    B.M.

 posso usare il metodo sort.
uh? e perche' no?
/me incuriosito
-- 
artemis://alpeia

 QUESTA LA INCORNICIO IN BACHECA!!  :-)
ROTFL :D
-- 
<img src="artemis.alpeia" />

 è da te!    :-)
Ma qui ci si sta facendo un'idea sbagliata di me, mi sa'.. ^_^;
I "ma" e "però" ce li metto quando ci devono stare; mica perche' mi
piacciono.. Di certo non li metto quando viene detta una cosa giusta.
E in tal caso, reagisco in due modi, dipendentemente dal contesto
ovviamente: o non faccio il reply, oppure se il post richiede una mia
risposta (come nel tuo caso) rispondo in modo affermativo.
Se mi sono confuso con lo splice(), e tu mi dici "non e' che ti sei confuso
con lo splice?", e' palese che ti dico "hai ragione" :)
-- 
ZER0
~ The Tangent Universe collapsed 5919 days, 3 hours, 32 minutes and 7 seconds ago.

 Ma qui ci si sta facendo un'idea sbagliata di me, mi sa'.. ^_^;
Ah, ecco, adesso riconosco lo Zer0!
Dai che ti sto prendendo un po' in giro, insomma, è Giovedì, prima
settimana dell'anno, ho dormito 2,5 ore...sopportami! :-/


L'algoritmo me lo sto inventando, perchè non ho trovato altro che sort.
Non posso usarlo, perchè ho due array parallei di pari lunghezza.
Se ordino il primo, che contiene stringhe, e poi ordino il secondo che
contiene numeri, tanto vale.
Per quello non devo usare il metodo sort.
invece vorrei ordinare, mettendo in un altro array gli indici ordinati. così
ciclando sul secondo, posso risalire alle corrette voci dell'array squadra
che non ha senso che sia ordinato di nuovo, visto che lo è già.

 Per quello non devo usare il metodo sort.
Al limite "non puoi" usare il metodo sort :)
E' sul "devi" che gli utenti del NG sono rimasti un po' perplessi..
-- 
ZER0
~ The Tangent Universe collapsed 5919 days, 7 hours, 16 minutes and 50 seconds ago.

Dicevo "non devo" perchè il metodo sort non mi fa vedere gli elementi
ordinati, ma li ordina, cambiando indice. Io invece non devo cambiare indice

 ordinati, ma li ordina, cambiando indice. Io invece non devo cambiare indice
Con l'ultimo esempio che ti ho fornito, puoi benissimo usare il sort stando
a quello che ci hai detto fin'ora.
Se cosi' non e', e' perche' non hai fornito tutti i dati circa il problema.
Nel caso, quindi, spiega meglio la situazione in cui ti trovi.
-- 
ZER0
~ The Tangent Universe collapsed 5919 days, 11 hours, 39 minutes and 48 seconds ago.

Forse č vero: ci provo!
Ho un array con i punti totalizzati fino a quel momento dalle squadre di un
torneo punti[]
Nell'altro array ho i nomi delle squadre. squadra[]
Stilando la classifica non devo ordinare i punti, altrimenti nella posizione
0 non ci sono piů i punti della squadra 0
Per quello volevo realizzare un algoritmo, che all'apparenza sembra banale,
che ordini in un altro array gli indici dal punteggio piů alto al piů basso.
Ciclando quindi su questo array, posso risalire facilmente alla squadra e al
suo punteggio, perchč in questo array "di servizio" ho memorizzato gli
indici.

 0 non ci sono più i punti della squadra 0
Nel post che ti ho scritto, tu puoi ordinare la tua struttura per nome
squadra o per punti, in modo ascendente o discendente, senza mai rischiare
di slegare le due cose.
Non capisco quindi cosa c'e' che non vada. A me pare che risolva
perfettamente la tua problematica.
-- 
ZER0://coder.gfxer.web-designer/
~ "Lo dice il buon senso, ma il buon senso non e' uno standard".
(Jeffrey Zeldman)

Perchè altrimenti non avrei scritto

 Perchè altrimenti non avrei scritto
Non ci siamo capiti. Ti ripeto:
"Non capisco quindi cosa c'e' che non vada. A me pare che risolva
perfettamente la tua problematica."
Questo, ovviamente, rispetto a quanto ci hai detto fin'ora.
Quindi, o hai omesso dei dettagli, oppure implementi cio' che ti ho fornito
in modo non corretto.
Dato che, rileggendo cio' che dici, confermo quanto detto (ovvero che
risolve esattamente il tuo tipo di problema), se per te cosi' non e',
potresti spiegare in modo preciso COSA della soluzione fornita non si
adegua al tuo problema?
Tu hai "n" squadre. Queste squadre hanno un nome e un punteggio associato.
Vuoi ordinare le squadre. Usando due array separati hai il problema di
mantenere il parallelo tra nome e punteggio durante l'ordinamento. Nel
codice che ti ho postato questo problema e' stato eliminato alla radice.
-- 
ZER0
~ The Tangent Universe collapsed 5920 days, 1 hours, 56 minutes and 40 seconds ago.

Probabilmente il tuo metodo funziona, ma non devo trasformare il punto di
partenza perchè gli array servono in altri punti del programma, e sono
separati. Era meglio un piccolo ordinamento manuale, che sistemare altri 20
punti del programma... In realtà non si è rivelato così.
Grazie

 punti del programma... In realtà non si è rivelato così.
Alla peggio puoi sempre copiare gli array nella struttura che ti ho
indicato quando devi fare l'ordinamento, e ordinare quella. Mantenendoli
separati nel resto del programma, se non hai tempo/voglia di modificare il
codice scritto in precedenza.
Ma ti ripeto che l'approccio corretto e' quello di averli sempre in un
unica struttura. Se fin'ora hai usato un approccio poco indicato, e' bene
modificarli, quei venti punti nel programma.
Sarebbe come se nella OOP, invece di avere "n" oggetti con ciascuno le sue
proprieta', si avessero "m" array per ciascuna proprieta' degli eoggetti in
questione, di lunghezza "n".
Puoi veder da te che e' qualcosa da far drizzare in capelli.
-- 
ZER0
~ The Tangent Universe collapsed 5920 days, 3 hours, 41 minutes and 22 seconds ago.