Associative arrays eller Map

Associative arrays eller Map

I LeekScript findes der "klassiske" arrays af typen "Array" og associative arrays af typen "Map".

Denne lidt særlige type array løser et konkret problem: Lad os sige, at jeg vil gemme min porres egenskaber, såsom styrke, visdom, modstand ... Så jeg har lavet et array:

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

Mit problem er nu, at jeg skal huske, at styrken ligger på 1. plads, visdommen på 2. og modstanden på 3. ... Lige nu går det fint, men om 2 uger har jeg fuldstændig glemt det!

Løsningen: I stedet for at nummerere pladserne ville det være smartere at give dem et sigende navn. Og det kan man faktisk – det hedder associative arrays!

var monPoireau = [:]; monPoireau["force"] = getStrength(); monPoireau["sagesse"] = getWisdom(); monPoireau["resistance"] = getResistance(); debug( monPoireau ); // Viser noget i stil med ["force" : 150, "sagesse" : 20, "resistance" : 95] debug( monPoireau["force"] ); // Viser 150

De sigende navne (man kalder dem nøgler) er her "force", "sagesse" og "resistance". I dette eksempel ser man, hvordan man erklærer dem, og hvordan man bruger dem. Nøgler kan være heltal eller strenge.

Praktisk! Men hvordan gennemløber man så et associativt array?

Følgende løkke:

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

I streng tilstand er denne typeangivelse uundværlig: på en Map, der blot er erklæret med var m = [:], kompilerer indsættelser ikke (typefejl), mens de accepteres på en Map.

Derefter kan man gennemløbe mappen sådan her:

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

Nu er det op til dig at bruge dem. Du vil se, at når man først kan bruge dem, kan man ikke undvære dem!