Visualizzazione dei risultati da 1 a 10 su 10

Discussione: Ordinare vettore 2D

  1. #1
    Utente di HTML.it L'avatar di lyllo
    Registrato dal
    Apr 2001
    Messaggi
    832

    Ordinare vettore 2D

    tutto nel titolo.
    sto impazzendo.

    vettore 2D:
    codice:
    var vett = new Array(new Array (),new Array());
    popolato in un ciclo for così:
    codice:
    		vett[0][i] = NUMERO;
    		vett[1][i] = testo;
    esempio:
    Pippo 2
    Lyllo 5
    Mimmo 1

    voglio riordinarlo per NUMERO, in modo che esca:
    Lyllo 5
    Pippo 2
    Mimmo1.



    codice:
    function sortMultiDimensional(a,b)
    {
        // this sorts the array using the second element    
        return ((a[0] < b[0]) ? -1 : ((a[0] > b[0]) ? 1 : 0));
    }
    
    vett.sort(sortMultiDimensional);
    non riesco a riordinarlo

  2. #2
    ma non ha senso, gli elementi sono slegati, non puoi ordinare un array in questo modo, dovrebbe essere il contrario:

    codice:
    var vett = [[],[],[],[],[],[],...]; //N volte
    //Poi lo popoli
    for(i = 0; i < N; i++){
       vett[i][0] = Numero;
       vett[i][1] = Testo;
    }
    I DON'T Double Click!

  3. #3
    Oppure riformula la funzione a cui referenzi l'ordinamento prendendo in considerazione solo il secondo valore (il secondo vettore, per la precisione).

  4. #4
    Utente di HTML.it L'avatar di lyllo
    Registrato dal
    Apr 2001
    Messaggi
    832
    scusate ma non ho capito...
    a e b non sono reserved per ordinare il vettore intendendo DUE elementi dello STESSO vettore?
    a me il vettore serve bidimensionale.
    non mi interessa sapere come popolarlo, visto che tra l'altro è popolato esattamente come dici tu artorius, (infatti non capisco perchè me lo riscrivi),
    a me interessa ORDINARLO

    visto che Aviaria ci si è avvicinato di più, mi potresti spiegare cosa intendi o come dovrei fare?
    io non ho mai usato quel tipo di espressioni con "punti interrogativi e due punti" peraltro a mio avviso modo pessimo di programmare, ma cmq, non avendolo mai usato mi trovo in difficoltà anche solo a CAPIRE cosa significhi.
    mi sono fidato, tutto qui

  5. #5
    Originariamente inviato da lyllo
    a e b non sono reserved per ordinare il vettore intendendo DUE elementi dello STESSO vettore?
    a me il vettore serve bidimensionale.
    non mi interessa sapere come popolarlo, visto che tra l'altro è popolato esattamente come dici tu artorius, (infatti non capisco perchè me lo riscrivi),
    tuo
    codice:
    vett[0][i] = NUMERO;
    vett[1][i] = testo;
    mio
    codice:
    vett[i][0] = Numero;
    vett[i][1] = Testo;
    Ce una bella differenza tra le due definizioni

    a me interessa ORDINARLO
    vabbè, usi le particolarità del sort:

    se fai
    codice:
    var arr = [2,85,36,8,5,456,8,5,5];
    arr.sort();
    gli elementi saranno ordinati ALFABETICAMENTE

    però puoi passargli una funzione da applicare che ritorni true o false prendendo in ingresso due elementi.

    se usi il modo che ti ho postato puoi fare un controllo di questo tipo;

    codice:
    function sortArr(item1, item2){
       return item1[0] - item2[0];
    }
    
    vett.sort(sortArr);
    Dovrebbe andare
    I DON'T Double Click!

  6. #6
    Utente di HTML.it L'avatar di lyllo
    Registrato dal
    Apr 2001
    Messaggi
    832
    se uso

    codice:
    vett[i][0] = Numero;
    vett[i][1] = Testo;
    mi dice "vett is undefined"

  7. #7
    ma hai fatto:

    codice:
    var vett = [[],[],[],[],[],[],...]; //N volte
    prima?
    I DON'T Double Click!

  8. #8
    Utente di HTML.it L'avatar di lyllo
    Registrato dal
    Apr 2001
    Messaggi
    832
    Originariamente inviato da artorius
    ma hai fatto:

    codice:
    var vett = [[],[],[],[],[],[],...]; //N volte
    prima?
    scusa due cose:
    1) non ho mai visto dichiarare un vettore così
    2) non so a priori quanto sarà grosso il vettore, non posso inizializzarlo a mano.. come faccio?

    grazie.

  9. #9
    vabbè definisci un array generico:

    codice:
    var vett = [];
    e poi lo popoli con il push()

    codice:
    vett.push([Numero, Testo])
    N.B: fare

    var vett = [];

    o

    var vett = new Array();

    è la stessa cosa
    I DON'T Double Click!

  10. #10
    Utente di HTML.it L'avatar di lyllo
    Registrato dal
    Apr 2001
    Messaggi
    832
    allora, ho avuto molto altro da fare e non mi sono dedicato più a questo piccolo aspetto.

    volevo ringraziarti perchè con la dichiarazione vett = []
    e poi il push ora va tutto bene.

    grazie!


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 © 2025 vBulletin Solutions, Inc. All rights reserved.