Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[Actionscript 2.0] Uniek Array

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo allemaal,

ik ben bezig met een uniek array te maken voor mijn RDF predicaten lijst, alleen het wil mij maar niet lukken. Ik heb genoeg zelf geprobeerd, "gegoogle'd", de search gebruikt, maar niets kunnen vinden. Vandaar dat ik het hier plaats.

Dit is mijn code

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
testArray = [1,1,1,1,3,4,1,5,5,5,6,7,8,8,9];
    
unique_Array(testArray);

function unique_Array(myArray:Array)
{
for(var y=0;y<myArray.length;y++)
        {
                for(var z=(y+1);z<myArray.length;z++)
                {
                        if(myArray[y]==myArray[z])
                        {
                                myArray.splice(z,1)
                        }
                }
        }
}

Als ik dit vervolgens trace dan krijg ik dit :

1,3,4,1,5,5,6,7,8,9

Het probleem is dus dat een lijst(array) wil hebben met alleen maar unieke elementen. Maar hij haalt alleen de dubbele elementen eruit. Terwijl dit toch de code moet zijn mijn inziens.

Wat doe ik fout ?

  • benoni
  • Registratie: November 2003
  • Niet online
Als je de trace() wat dieper in de lus zet, zodat je elke cycle kunt controleren, wat komt er dan uit?

Addit: ik heb bovenstaande test laten lopen, en zie dat op het moment dat myArray.splice(z,1) een element uit de array haalt, de z teller 1 te hoog is, dus het volgende element wordt overgeslagen.

[ Voor 32% gewijzigd door benoni op 12-05-2004 17:34 ]


Verwijderd

De eenvoudigste oplossing is als je de array eerst sort(), denk ik.
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
in JavaScript:

function UniqueArray( myArray ) {
    myArray = myArray.sort();
    var aUnique = new Array();
    var iValue = null;
    for(var i=0; i<myArray.length; i++) {
        if(myArray[i] != iValue) {
            aUnique[aUnique.length] = myArray[i];
        }
        iValue = myArray[i];
    }
    return aUnique;
}

var a = [1,2,54,12,2,1,3,4,5];
var b = UniqueArray( a );

Niet getest, maar moet in de buurt komen...

Het algoritme is extreem simpel. Door het sorteren komen alle gelijke nummers bij elkaar te staan. Je loopt gewoon een keer door het hele ding en verzamelt alleen de getallen die niet gelijk waren aan het vorige getal.

  • tie-rep
  • Registratie: Oktober 2001
  • Laatst online: 04-11 22:06

tie-rep

nu met ir. !

Verwijderd schreef op 12 mei 2004 @ 19:50:
De eenvoudigste oplossing is als je de array eerst sort(), denk ik.
Java:
1
in JavaScript:
<knip>
dit is ook AS :)

Werkt prima; nette code!

Verwijderd

tie-rep schreef op 13 mei 2004 @ 08:44:
Werkt prima; nette code!
Bedankt. Nadeel is natuurlijk wel dat de originele volgorde van de waarden in de arrays niet intact blijft...

  • benoni
  • Registratie: November 2003
  • Niet online
Verwijderd schreef op 13 mei 2004 @ 10:32:
Bedankt. Nadeel is natuurlijk wel dat de originele volgorde van de waarden in de arrays niet intact blijft...
Dan moet je je oude methode gebruiken, alleen dan de z anders laten tellen, bijvoorbeeld met een while lusje, en de z alleen laten verhogen als het nodig is.

Verwijderd

Topicstarter
Verwijderd schreef op 13 mei 2004 @ 10:32:
[...]

Bedankt. Nadeel is natuurlijk wel dat de originele volgorde van de waarden in de arrays niet intact blijft...
De volgorde maakt mij niet zoveel uit. Ik heb straks een array met zgn. Predicaten. Dit zijn gewoons strings, ik heb die lijst met getallen genomen als voorbeeld, getallen of strings maakt volgens mij niet zoveel uit. Ik zal even kijken naar die z-waarde of ik deze misschien met een while funcie moet oplossen. Iig bedankt voor de tips, so far.

Edit: Bedank Blues _/-\o_ Dit werkt prima, zoals ik al zei maakt de volgorde niet uit. Respect 8)

[ Voor 9% gewijzigd door Verwijderd op 13-05-2004 14:07 ]

Pagina: 1