Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2002
    Messaggi
    144

    probelma con sortOn e Array.NUMERIC

    Ciao a tutti ... ho un problemino e non riesco a capire perchè non funziona.
    creo un array (l'ho semplificato per metterlo qui, non ci saranno solo numeri all'interno dell'array)
    poi lo voglio ordinare in base ai punti (decrescente) e al tempo (crescente)

    il codice è questo
    codice:
    record = "350||70201,940||66796,935||8000,835||366065,935||74629,55||93012,990||79191";
    _root.var_record = _root.record.split(",");
    var rec_big:Array = new Array();
    for (i=0; i<var_record.length; i++) {
    	var_record2 = var_record[i].split("||");
    	var _punti:Number = _root.var_record2[0];
    	var _tempo:Number = _root.var_record2[1];
    	rec_big.push({punti:_punti, tempo:_tempo});
    }
    rec_big.sortOn(["punti", "tempo"], [Array.DESCENDING | Array.NUMERIC, Array.NUMERIC]);
    for (i=0; i<rec_big.length; i++) {
    	trace(rec_big[i].punti+", "+rec_big[i].tempo);
    }
    questo è quello che mi stampa
    990, 79191
    940, 66796
    935, 74629
    935, 8000
    835, 366065
    55, 93012
    350, 70201

    come vedete il 55 lo considera più grande di 350.
    sulla guida ti fa usare proprio Array.NUMERIC per risolvere questo problema... ma niente da fare... è capitato anche a voi??
    Come risolvo?
    Grazie in anticipo

    Emiliano

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,780

    Re: probelma con sortOn e Array.NUMERIC

    Ciao Emiliano
    sulla guida ti fa usare proprio Array.NUMERIC per risolvere questo problema... ma niente da fare...
    Esattamente! Devi però utilizzare proprio dei valori numerici, mentre tu stai passando delle stringhe anche se di fatto hai definito le variabili con la "tipizzazione forte" di tipo Number.
    codice:
    var _punti:Number = _root.var_record2[0];
    var _tempo:Number = _root.var_record2[1];
    Teoricamente (molto teoricamente) flash dovrebbe restituire un errore e avvertire che stai assegnando un valore non numerico mentre hai dichiarato una variabile di tipo numerico.
    Ma sai com'è... ti avverte solo se fai una dichiarazione esplicita tipo
    var pippo:Number = "valore stringa"; .. a questo punto se ne accorge.

    Per risolvere devi quindi convertire in numero i valori assegnati alle variabili.
    codice:
    var _punti:Number = Number(_root.var_record2[0]);
    var _tempo:Number = Number(_root.var_record2[1]);
    NOTA:
    Se dovesse capitarti, fai attenzione ad utilizzare Number per convertire delle stringhe che inizino con la cifra zero "0" seguita da una cifra minore di 9. Questo convertirà la stringa in numero ottale.
    Per fugare ogni possibilità di errore puoi utilizzare la funzione parseInt con base 10 che restituirà sempre un numero intero decimale.
    Es:
    codice:
    var _punti:Number = parseInt(_root.var_record2[0], 10);
    var _tempo:Number = parseInt(_root.var_record2[1], 10);
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2002
    Messaggi
    144
    Sei un grande!!
    Ma non tanto per avermi dato la risposta, ma per COME me l'hai data.
    Mi hai dato tutta la spiegazione, sei veramente un mito!!!!

    Grazie alle persone come te mi sono innamorato di questo lavoro! Grazie!!
    Emiliano

  4. #4
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,780
    No problem!!
    Buon proseguiomento.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.