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
0Prá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ě
bramboryLua 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.
Jak psát:
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
2/11