Délka seznamu

Operátor # znáte z textů: #"mrkev" je 5, délka textu. Když ho napíšete před seznam, dá vám počet prvků, tedy délku seznamu:

local plodiny = {"mrkev", "brambory", "dýně"}
print(#plodiny)
print("Plodiny: " .. #plodiny)
print(#{})

Vypíše:

3
Plodiny: 3
0

Prázdný seznam má délku 0. # dává obyčejné číslo, takže s ním můžete počítat: #plodiny + 1 je 4. Nespleťte si ale #plodiny a #plodiny[1]. To druhé je délka prvního prvku, textu "mrkev": 5.

Z délky také poznáte, kde je poslední prvek. Indexy jdou od 1 do počtu prvků, takže poslední index je přímo délka: seznam se 3 prvky má indexy 1, 2 a 3. Poslední prvek je plodiny[#plodiny]:

local plodiny = {"mrkev", "brambory", "dýně"}
print(plodiny[#plodiny])
print(plodiny[#plodiny - 1])

Vypíše:

dýně
brambory

Lua nejdřív spočítá index v hranatých závorkách (#plodiny je 3 a 3 − 1 jsou 2) a teprve pak přečte prvek na tomto indexu. plodiny[#plodiny - 1] je tedy předposlední prvek.

Proč nenapsat prostě plodiny[3]? Protože seznamy se mění. V dalších cvičeních budete prvky přidávat a odebírat a programy často pracují se seznamy, které samy nevytvořily, a ty mohou mít jakoukoli délku. plodiny[#plodiny] je vždycky poslední prvek, ať je seznam jakkoli dlouhý. S plodiny[3] by program vypisoval třetí plodinu, i když Ema zasadí čtvrtou.

Častá chyba je jít o krok dál. plodiny[#plodiny + 1] je místo hned za posledním prvkem, kde zatím nic není:

local plodiny = {"mrkev", "brambory", "dýně"}
print("Poslední plodina: " .. plodiny[#plodiny + 1])
main.lua:2: attempt to concatenate a nil value (field '?')

Tentokrát hláška říká field '?'. Lua index popíše, jen když je to číslo napsané přímo v kódu; tady ho musela nejdřív spočítat. Místo #plodiny + 1 se vám ale bude hodit: v dalším cvičení na něj přidáte nový prvek.

Pokyny

Pod print vypište pomocí # počet pytlíků se semeny v seznamu: Pytlíky: 5.

Vytvořte lokální proměnnou posledni s posledním prvkem seznamu semena. Získejte ho pomocí #, ne číslem 5.

Vypište ho: Poslední: pšenice.

Nakonec stejným způsobem vypište předposlední pytlík, pomocí #semena - 1: Předposlední: jahody.

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/11