pesten Skrevet 24. juni 2005 Del Skrevet 24. juni 2005 (endret) Hei. Jeg lurer på et nokså simpelt problem, men som er ganske vesentlig for meg. Jeg vil vel si at jeg er en nybegynner når det gjelder perl. Jeg har prøvd å 'google' litt rundt etter en løsning på problemet, men jeg har ikke funnet noe. Men jeg vil gjerne vite indexen til array som består av f.eks. disse elementene: @array = (2,3,5,7,11,13); Hvordan skal jeg lett finne indexen til 7? Jeg har hittil brukt en mongo metode der jeg bruker en for loop på arrayet og sjekker hvert element om det er et 7 tall. Men denne metoden er ganske ineffektiv på store array som dere sikkert skjønner. Takker for hjelp! Endret 24. juni 2005 av pesten Lenke til kommentar
sam2 Skrevet 24. juni 2005 Del Skrevet 24. juni 2005 Dersom du har vilkårlige data i en array, så er det ingen annen måte å finne et spesifikt element enn å loope gjennom array'en. Dersom du har en viss struktur på array-data, så kan du nok legge på noe logikk for å redusere antall oppslag i array..men den enkle løsning er å bruke en hash istedenfor array. Lenke til kommentar
mysjkin Skrevet 25. juni 2005 Del Skrevet 25. juni 2005 Eksemplet du viser er et array med sorterte elementer, dersom du vet at elementene er sorterte, kan du bruke binærsøk (er det vel det heter?): Del arrayet i to, se om tallet du leter etter er større eller mindre en der du har indeksen, fortsett til du har funnet elementet ditt. eksempel: søker etter 3: <pseudokode> @array = (2,3,5,7,11,13); i=floor(5/2)=2 -> $array[2]=5 vet at tallet må være før, så gjentar: i=floor(2/2)=1 -> $array[1]=3 </pseudokode> I værste fall må du sammenlikne kvadratroten(n) ganger for n elementer. Finnes det bedre teknikker? (Jeg vet ikke) Dersom du ikke vet at elementene er sortert og du skal søke mange ganger, kan du lage en index-hash samtidig med at du putter dem inn i arrayet: while(<>) { $array[++$i]=$_; $hash{$_}=$i; } Dersom du kan få verdier som ikke er gyldige hash-nøkler, må du kode dem på en eller annen måte. Dersom ikke verdiene er unike, vil du alltid få treff på siste gang verdien var lagt inn. Lykke til! M. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå