Assosiatiiviset taulukot eli Map

Assosiatiiviset taulukot eli Map

LeekScriptissä on "tavallisia" Array-tyyppisiä taulukoita sekä Map-tyyppisiä assosiatiivisia taulukoita.

Tämä hieman erikoinen taulukkotyyppi ratkaisee seuraavanlaisen ongelman: oletetaan, että haluan pitää muistissa purjoni ominaisuudet, kuten vahvuuden, viisauden, resistanssin... Tein siis taulukon:

var monPoireau = []; push(monPoireau, getStrength()); push(monPoireau, getWisdom()); push(monPoireau, getResistance());

Ongelmani on nyt se, että minun täytyy muistaa, että vahvuus on 1. paikassa, viisaus 2. paikassa ja resistanssi 3. paikassa... Juuri nyt se onnistuu, mutta kahden viikon päästä olen unohtanut sen täysin!

Ratkaisu: paikkojen numeroimisen sijaan olisi nokkelampaa antaa niille selkeä nimi. Se on mahdollista, ja sitä kutsutaan assosiatiiviseksi taulukoksi!

var monPoireau = [:]; monPoireau["force"] = getStrength(); monPoireau["sagesse"] = getWisdom(); monPoireau["resistance"] = getResistance(); debug( monPoireau ); // Näyttää jotain tämäntapaista: ["force" : 150, "sagesse" : 20, "resistance" : 95] debug( monPoireau["force"] ); // Näyttää 150

Selkeät nimet (niitä kutsutaan avaimiksi) ovat tässä "force", "sagesse" ja "resistance". Esimerkistä näkyy, miten ne määritellään ja miten niitä käytetään. Avaimet voivat olla kokonaislukuja tai merkkijonoja.

Kätevää! Mutta miten assosiatiivinen taulukko sitten käydään läpi?

Seuraava silmukka:

for (var k = 0; k maMap = [:];

Tiukassa tilassa tämä tyypitys on välttämätön: pelkällä var m = [:] -määrittelyllä luotuun Mapiin lisäykset eivät käänny (tyyppivirhe), kun taas Map-tyyppiseen ne hyväksytään.

Sen jälkeen mapin voi käydä läpi näin:

for (string maCle : integer maValeur in maMap) { debug("Pour la clé " + maCle + " la valeur qui correspond est " + maValeur); }

Nyt on sinun vuorosi käyttää niitä. Huomaat, että kun niitä osaa käyttää, ilman niitä ei enää tule toimeen!