Přidávání a odebírání klíčů
Slovník se může za běhu programu měnit. Hodnotu změníte stejně jako proměnnou, pomocí =. A když přiřadíte do klíče, který tabulka ještě nemá, Lua ho přidá:
local stodola = {mrkev = 12, brambory = 30}
stodola.mrkev = stodola.mrkev + 5
stodola.vejce = 18
stodola["dýně"] = 4
print(stodola.mrkev, stodola.vejce, stodola["dýně"])Vypíše:
17 18 4Můžete také začít s prázdnou tabulkou {} a dvojice přidávat jednu po druhé: local stodola = {} a pak stodola.vejce = 18.
Každý klíč je v tabulce jen jednou. Přiřazení do klíče, který už tam je, nahradí jeho hodnotu; druhou dvojici se stejným klíčem nepřidá.
Když přečtete klíč, který v tabulce není, chyba to není: dostanete nil, stejně jako u indexu za koncem seznamu. Chyba přijde, až když s tím nil zkusíte počítat:
local stodola = {mrkev = 12, brambory = 30}
print(stodola.jahody)
print(stodola.jahody + 1)Vypíše:
nil
main.lua:4: attempt to perform arithmetic on a nil value (field 'jahody')Hláška říká field 'jahody': v chybových hláškách Lua říká klíči tabulky field (anglicky pole, položka). Stejně dopadne překlep: stodola.mrkef je také nil, a to bez varování, protože Lua nemůže vědět, že jste mysleli mrkev. Záleží i na velkých a malých písmenech: stodola.Mrkev je jiný klíč.
Když má chybějící klíč znamenat nulu, použijte or, jako u výchozích hodnot v lekci o podmínkách: stodola.jahody or 0 je 0, když jahody ve stodole nejsou, a jejich počet, když tam jsou.
Klíč odeberete tak, že do něj přiřadíte nil: stodola.brambory = nil. Klíč s hodnotou nil a klíč, který v tabulce není, jsou pro Lua totéž, takže po tomto řádku už brambory v tabulce nejsou.
A jedno překvapení: # dvojice slovníku nepočítá. Počítá jen prvky seznamu, tedy klíče 1, 2, 3…:
local stodola = {mrkev = 12, brambory = 30, jahody = 4}
print(#stodola)0Jak klíče spočítat, uvidíte ve cvičení o pairs.
Jak psát:
Pokyny
Program skončí chybou: jahody ve stodole nejsou, takže stodola.jahody je nil. Ema jich právě natrhala 8 košíků. Pod komentář -- Sem patří změny: přidejte do tabulky klíč jahody s hodnotou 8 (řádek se složenými závorkami nechte, jak je). Program pak vypíše:
Mrkev: 12
Jahody: 8Ema prodala na trhu 5 mrkví. Pod řádek, který přidává jahody, snižte počet mrkví v tabulce o 5. První řádek pak bude:
Mrkev: 7Děda Josef koupil všechny brambory. Pod řádek, který mění počet mrkví, odeberte z tabulky klíč brambory tak, že do něj přiřadíte nil.
Na konec programu přidejte výpis brambor. Žádné nejsou, takže použijte or 0. Dejte to do závorek, (stodola.brambory or 0): bez nich by Lua nejdřív provedla .. a program by skončil chybou. Nový řádek bude:
Brambory: 0Začněte programovat zdarma
2/10