Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    rimuovere voci duplicate in un array

    io ho fatto così e sembra funzionare:

    Codice PHP:
    test=new Array("5","1","8","2","1","2","3","3","4","3","5","3","3","3","3","3","3");

    trace("intonso: "+test);

    rem_dup=function(arr){
        
    arr.sort();
        
    trace("ordinato: "+test);
        for(
    i=0i<arr.length-1i++){
            if(
    arr[i]==arr[i+1]){arr.splice(i,1);i--}
            }
            
    trace("ripulito: "+test);
        }

    rem_dup(test); 
    volevo conoscere altri sistemi per avere lo stesso risultato.

  2. #2
    Boh, si potrebbe travasare l'array in un nuovo array se il contenuto dell'indice è nuovo, così non c'è bisogno di ordinarla, ma dovresti clicare ogni indice del nuovo array per confrontarlo con l'indice del vecchio.

    La tua soluzione mi pare molto elegante.

  3. #3
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725

    Re: rimuovere voci duplicate in un array

    Originariamente inviato da eloderma
    io ho fatto così e sembra funzionare:

    Codice PHP:
    test=new Array("5","1","8","2","1","2","3","3","4","3","5","3","3","3","3","3","3");

    trace("intonso: "+test);

    rem_dup=function(arr){
        
    arr.sort();
        
    trace("ordinato: "+test);
        for(
    i=0i<arr.length-1i++){
            if(
    arr[i]==arr[i+1]){arr.splice(i,1);i--}
            }
            
    trace("ripulito: "+test);
        }

    rem_dup(test); 
    volevo conoscere altri sistemi per avere lo stesso risultato.
    Molto interessante
    Ma se volessi proprio eliminare tutte le occorrenze doppie (anche la prima delle due o + trovate) e lasciare solo i valori presenti una sola volta (nell'es. solo il 4 e l'8 mi pare..) come si potrebbe modificare? :master:


    Grazie a chi lo sà e lo palesa


  4. #4
    Utente di HTML.it L'avatar di kansuke
    Registrato dal
    Apr 2004
    Messaggi
    350
    Per restare a qualcosa di simile a questo credo ti convenga segnarti l'indice invece di tagliare l'occorrenza.
    Poi parti dall'ultima alla prima e le elimini.
    "Hanno chiuso le mandrie nelle stalle
    perchè liberi siamo fino all'alba."
    R. Kipling

  5. #5
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725

    un es. della tua variante?

    Grazie se puoi


  6. #6
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725

    Con questa modifica sono quasi riuscito ad ottenere il desiderato...

    test=new Array("5","1","8","2","1","2","3","3","4","3","5", "3","3","3","3","3","3");

    trace("intonso: "+test);

    rem_dup=function(arr){
    arr.sort();
    trace("ordinato: "+test);
    for(i=0; i<arr.length-1; i++){
    if(arr[i] <> arr[i+1])

    {arr.splice(i,1);i--}

    }
    trace("ripulito: "+test);
    }

    rem_dup(test);

    ovvero mettendo <> al posto di == ho tolto con splice solo il valore presente una volta sola cioè in questo caso il 4.. (l'8 me l'ha lasciato... )

    ma adesso...

    come faccio a recuperarlo e visualizzarlo? E' in una sorta di "appunti..." o è cancellato e irrecuperabile?

    THANKS!


  7. #7
    Utente di HTML.it L'avatar di kansuke
    Registrato dal
    Apr 2004
    Messaggi
    350
    perchè hai messo <>???

    in questa maniera cancella ogni valore che non abbia un valore successivo uguale a sestesso.

    Prrova qualcosa di simile, io non l'ho testato

    test=new Array("5","1","8","2","1","2","3","3","4","3","5", "3","3","3","3","3","3");

    trace("intonso: "+test);

    rem_dup=function(arr){
    duplicati=new Array;
    arr.sort();
    trace("ordinato: "+test);
    for(i=0; i<arr.length-1; i++){
    if(arr[i] <> arr[i+1]){
    duplicati.push(i, i+1);
    }
    }
    for(i=duplicati.length-1; i>0; i--){
    arr.splice(duplicati[i],1);
    }
    trace("ripulito: "+test);
    }

    rem_dup(test);
    "Hanno chiuso le mandrie nelle stalle
    perchè liberi siamo fino all'alba."
    R. Kipling

  8. #8
    Utente di HTML.it L'avatar di freetom
    Registrato dal
    Nov 2001
    Messaggi
    3,725

    provato...

    questo il risultato:

    intonso: 5,1,8,2,1,2,3,3,4,3,5,3,3,3,3,3,3
    ordinato: 1,1,2,2,3,3,3,3,3,3,3,3,3,4,5,5,8
    ripulito: 1,1,3,3,3,3,3,3,3

    come vedi siamo ben lontani dall'avere il 4 e l'8 purtroppo...

    Grazie comunque


  9. #9
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    spiacente, thread vetusto... meglio aprirne uno nuovo

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.