Gå til innhold

melding til mysjkin, relatert til map og sticky


Anbefalte innlegg

venligst ikke bruk stick posten øverst, "geniale perlsnutter" til generelt forumsnakk, ta det her istedet

 

map er veldig enkel å komme igang med, syntaks:

 

map BLOCK LIST

 

forståes slik, "kjør kodesekvensen i BLOCK" over hvert element i LIST"

 

foreksempel, skrive ut elementer i en liste:

perl -le 'map { print } (1,2,3,4)'

 

print tar underforstått $_ som argument hvis ikke annet er angitt. $_ blir satt til respektive elementer i lista (her 1,2,3,4)

 

perl -le 'map { print $_**2 } (1,2,3,4)'

skriver ut kvadratet av alle tall i lista.

 

 

perl -le '@array = map { ord } ("a","b","c")'

lagrer numerisk verdi for tegnene @array. (97, 98 og 99)

 

hver evaluering av BLOCK returnerer 1 eller flere elementer. (ikke noe iveien for å returnere en liste ved evaluering av hvert element)

 

perl -le 'print $_ for map { $_,$_.$_ } ("a","b","c")'

Lenke til kommentar
Videoannonse
Annonse

Torbjørn wrote:

perl -le 'map { print $_**2 } (1,2,3,4)'

 

 

Merk forøvrig at $_ er alias til elementene i listen..slik at vi faktisk endrer selve liste innholdet når kommandoen kjører.. Ikke alltid det vi ønsker.

 

Forøvrig så har jeg hørt om steder der man *nektes* å bruke map kommandoen, pga den skaper kode som er vanskelig å vedlikeholde/lese.. En foreach loop er ofte et bedre valg..

Lenke til kommentar

ønsker du å oppdatere innholdet i lista, er en forloop like så greit, og mer lesbar, som sam2 sier.

 

hvis du trenger en modifisert liste kjapt og enkelt, ser jeg ikke noen grunn til å ikke bruke map.

 

jeg laget i skrivende stund en funksjon slik:

 

return @array[ map { $_-1} @_ ];

 

for å returnere elementer fra @array basert på eksterne indekser (teller fra 1 og oppover) istedet fra 0. anser dette som penre enn å endre $[.

Lenke til kommentar

Hehe, takk Tobjørn. Bra eksempel på det som jeg nevnte med at map fort skaper uleselig kode..

 

men..kommer jo selføgelig ann på øyet som er.. Selv synes jeg denne er en mykje bedre variant:

 

$_--  for (@_);
return  @array[@_];

 

enklere å se hva som skjer..selv om vi må bruke en linje ekstra:

 

Er generellt skeptisk til å trekke sammen en haug av funksjoner på denne måten som du ofte har en tendens til å gjøre. Koden blir ofte obfu.. Når det er sagt, så kjører jo flesterparten av dine snutter fra kommando-linjen, slik at det er jo en formildende omstendighet ;)

 

Har erfaring med at når en skal se på koden noen mnd senere, så må en gruble og tenke mer enn det som burde være nødvendig for å skjønne/huske hva som egentlig foregår dersom vi koder på denne kompakte måten. (noe jeg forøvrig husker jeg så demonstrert med en kommentar du hadde i SMS klassen din Torbjørn..hehe..).

Lenke til kommentar
  sam2 skrev:
Hehe, takk Tobjørn. Bra eksempel på det som jeg nevnte med at map fort skaper uleselig kode..

Hehe, jeg syntes ikke den var så ille jeg men ;p

 

Husker jeg hadde noe uforklarlig kode der et sted ja.

 

Med korrekt og god dokumentasjon så kommer man langt dog.

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...