Maps

Maps

In LeekScript gibt es die „klassischen“ Arrays vom Typ „Array“ und die assoziativen Arrays vom Typ „Map“.

Diese etwas besondere Art von Array löst folgendes Problem: Angenommen, ich möchte mir die Merkmale meines Lauchs merken, etwa Stärke, Weisheit, Widerstand, ... Also habe ich ein Array angelegt:

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

Mein Problem ist jetzt, dass ich mir merken muss, dass die Stärke im 1. Feld steht, die Weisheit im 2. und der Widerstand im 3. ... Im Moment geht das noch, aber in zwei Wochen habe ich es garantiert vergessen!

Die Lösung: Statt die Felder zu nummerieren, wäre es geschickter, ihnen einen sprechenden Namen zu geben. Und genau das ist möglich, das nennt man assoziative Arrays!

var monPoireau = [:]; monPoireau["force"] = getStrength(); monPoireau["sagesse"] = getWisdom(); monPoireau["resistance"] = getResistance(); debug( monPoireau ); // Zeigt so etwas wie ["force" : 150, "sagesse" : 20, "resistance" : 95] debug( monPoireau["force"] ); // Zeigt 150

Die sprechenden Namen (man nennt sie Schlüssel) sind hier "force", "sagesse" und "resistance". In diesem Beispiel sieht man, wie man sie deklariert und wie man sie benutzt. Schlüssel können ganze Zahlen oder Zeichenketten sein.

Praktisch! Aber wie durchläuft man dann ein assoziatives Array?

Die folgende Schleife:

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

Im strengen Modus ist diese Typisierung unverzichtbar: Bei einer Map, die einfach mit var m = [:] deklariert wurde, kompilieren die Einfügungen nicht (Typfehler), während sie bei einer Map akzeptiert werden.

Anschließend kann man die Map so durchlaufen:

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

Jetzt bist du dran, sie zu benutzen. Du wirst sehen: Wenn man sie einmal beherrscht, will man sie nicht mehr missen!