Schlüssel hinzufügen und entfernen
Ein Dictionary kann sich ändern, während das Programm läuft. Du änderst einen Wert genauso wie eine Variable, mit =. Und wenn du einem Schlüssel etwas zuweist, den die Tabelle noch nicht hat, fügt Lua ihn hinzu:
local scheune = {Karotten = 12, Kartoffeln = 30}
scheune.Karotten = scheune.Karotten + 5
scheune.Eier = 18
scheune["Rote Bete"] = 9
print(scheune.Karotten, scheune.Eier, scheune["Rote Bete"])Das gibt Folgendes aus:
17 18 9Du kannst auch mit einer leeren Tabelle, {}, beginnen und die Paare nacheinander hinzufügen: local scheune = {}, dann scheune.Eier = 18.
Jeder Schlüssel steht nur einmal in einer Tabelle. Weist du einem Schlüssel etwas zu, der schon da ist, ersetzt das seinen Wert; es fügt kein zweites Paar mit demselben Schlüssel hinzu.
Liest du einen Schlüssel, der nicht in der Tabelle ist, ist das kein Fehler: Du bekommst nil, wie bei einem Index hinter dem Ende einer Liste. Der Fehler kommt erst, wenn du mit diesem nil rechnest:
local scheune = {Karotten = 12, Kartoffeln = 30}
print(scheune.Zucchini)
print(scheune.Zucchini + 1)Das gibt Folgendes aus:
nil
main.lua:4: attempt to perform arithmetic on a nil value (field 'Zucchini')Die Meldung sagt field 'Zucchini': In Fehlermeldungen nennt Lua einen Schlüssel einer Tabelle ein Feld. Ein Tippfehler endet genauso: scheune.Karoten ist ebenfalls nil, ohne Warnung, weil Lua nicht wissen kann, dass du Karotten meintest. Auch Groß- und Kleinschreibung zählt: scheune.karotten ist ein anderer Schlüssel.
Wenn ein fehlender Schlüssel als null gelten soll, benutze or, wie bei den Standardwerten in der Lektion über Bedingungen: scheune.Zucchini or 0 ist 0, wenn keine Zucchini in der Scheune liegen, und ihre Anzahl, wenn welche da sind.
Um einen Schlüssel zu entfernen, weist du ihm nil zu: scheune.Kartoffeln = nil. Für Lua sind ein Schlüssel mit dem Wert nil und ein Schlüssel, der nicht in der Tabelle ist, dasselbe, also sind die Kartoffeln nach dieser Zeile aus der Tabelle verschwunden.
Und eine Überraschung: # zählt nicht die Paare eines Dictionarys. Es zählt nur die Elemente einer Liste, die Schlüssel 1, 2, 3 …:
local scheune = {Karotten = 12, Kartoffeln = 30, Zucchini = 4}
print(#scheune)0Wie du die Schlüssel zählst, siehst du in der Übung zu pairs.
So schreibst du es:
Anweisungen
- 1
Das Programm endet mit einem Fehler: In der Scheune gibt es keine Erdbeeren, also ist
scheune.Erdbeerengleichnil. Emma hat gerade 8 Körbe davon gepflückt. Füge unter dem Kommentar-- Änderungen kommen hierhin:den SchlüsselErdbeerenmit dem Wert8zur Tabelle hinzu (lass die Zeile mit den geschweiften Klammern, wie sie ist). Das Programm gibt dann Folgendes aus:Karotten: 12 Erdbeeren: 8 - 2
Emma verkauft 5 Karotten auf dem Markt. Verringere unter der Zeile, die die Erdbeeren hinzufügt, die Anzahl der Karotten in der Tabelle um 5. Die erste Zeile lautet dann:
Karotten: 7 - 3
Opa Josef kauft alle Kartoffeln. Entferne unter der Zeile, die die Karotten ändert, den Schlüssel
Kartoffelnaus der Tabelle, indem du ihmnilzuweist. - 4
Gib am Ende des Programms die Kartoffeln aus. Es gibt keine mehr, also benutze
or 0. Setze es in Klammern,(scheune.Kartoffeln or 0): Ohne sie würde Lua zuerst das..ausführen, und das Programm würde mit einem Fehler enden. Die neue Zeile lautet:Kartoffeln: 0