Gå til innhold

Finne index til et element i perl?


Anbefalte innlegg

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. :blush: Men denne metoden er ganske ineffektiv på store array som dere sikkert skjønner.

 

Takker for hjelp!

Endret av pesten
Lenke til kommentar
Videoannonse
Annonse

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

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...