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	4

Můž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)
0

Jak klíče spočítat, uvidíte ve cvičení o pairs.

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: 8

Ema 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: 7

Dě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: 0

Začněte programovat zdarma

Registrací souhlasíte s provozními podmínkami a zásadami ochrany osobních údajů.

Nebo se registrujte pomocí:

2/10