Авторизация



Задай мне вопрос

Голосования

Вы любите, когда вам чешут спинку? ;)
 

ГлавнаяСтатьиLua → массивы в lua
массивы в lua E-mail
User Rating: / 2
PoorBest 
Written by xternalx   
Tuesday, 27 April 2010 22:14

Привет! Решил написать небольшой пост про массивы в этом замечательном языке lua.

Да будет тебе известно, что как таковых массивов в lua не предусмотрено, в качестве массивов принято использовать таблицы. И Использовать их ну очень удобно :)

Итак, для начала давай разберемся с одномерными массивами.

Одномерный массив - это набор, или список однотипных переменных, идущих друг за другом. У каждой переменной есть свой индекс, по которому можно получить значение переменной в массиве ;)

Давай посмотрим как это выглядит :)

array_once

Каждая клетка в приведенной выше картинке соответствует одной переменной в массиве, а цифры под клетками - это индексы, по которым можно получить значение переменной. Не удивляйся что нумерация начинается с единицы а не с нуля. В Lua нумерация начинается с единицы.

Теперь неплохо было бы показать, как можно записать массив этих значений на языке lua:

local array = {"А","Б","В","Г","Д","Е"}

Как видишь, все легко и просто. Теперь выведем на экран произвольные элементы массива

print(array[1]) -- вернет А
print(array[3]) -- вернет В

Чтобы изменить значения переменных в массиве, так же используются индексы:

array[1] = "И"
array[3]= "З"

Теперь массив array будет содержать следующую последовательность значений: И, Б, З, Г, Д, Е.

Кроме числовых индексов так же можно использовать строковые индексы, такие массивы называются ассоциативными, чтобы проще понять, посмотри на код ниже:

local array = {a="А", b="Б", c="В", d="Г", e="Д", f="Е"}

Теперь в переменной array с ключем a будет значение А:

-- обратимся к элементам массива как к свойствам:
print(array.a) -- выведет на экран А
print(array.f) -- выведет на экран Е

Приведенный выше код равносилен этому:

print(array["a"]) -- выведет на экран А
print(array["f"]) -- выведет на экран Е

Операции присваивания значений в ассоциативных массивах точно такие же, как и в случае с индексными, поэтому заострять внимания на этом не буду.

Теперь ты имеешь краткое представление о том, как создаются и выглядят массивы в lua.

Хорошо, когда нам нужен статический массив(т.е. мы описали его руками в скрипте, указав нужные значения его элементам), но что же делать, когда массив динамический и элементы нужно или добавлять, или удалять?

на помощь приходят 2 метода из библиотеки table(помнишь, что роль массивов в lua выполняют таблицы? :)):

table.insert(tab, value)
table.remove(tab, position)

метод table.insert() позволяет добавлять в существующий массив новые эелементы, а table.remove() - позволяет удалить любой из элементов массива

local array = {a="А", b="Б", c="В", d="Г", e="Д", f="Е"}
table.insert(array, "Ж")

теперь массив будет состоять из 7 переменных, 7-я переменная содержит в себе букву Ж.

local array = {a="А", b="Б", c="В", d="Г", e="Д", f="Е"}
table.remove(array, 2)

теперь массив array состоит из 5 переменных - А, В, Г, Д, Е.

Получить размер(длину) массива позволяет оператор #

local array = {a="А", b="Б", c="В", d="Г", e="Д", f="Е"}
print(#array) -- напечатает 6, т.к. массив состоит из 6 элементов

Теперь давай распечатаем содержимое массива. В этом нам поможет метод-итератор pairs(table):

local array = {a="А", b="Б", c="В", d="Г", e="Д", f="Е"}
 
for key, value in pairs(array) do
print(key, value)
end
 

результатом этого кода будет следущее:

 
a       А
c       В
b       Б
e       Д
d       Г
f       Е
 

 

На этом собственно, все, что нужно знать для начала работы с массивами в lua. На всякий случай рекомендую почитать описание библиотеки table.

В следующей статье напишу, как можно организовать двух-трех-четырех-сколько_угодно_много_мерные массивы в lua;)

Вопросы и пожелания жду в каментах :)


Last Updated on Sunday, 26 December 2010 00:59
 

Comments  

 
+2 # Evg 2010-12-25 22:20
В последнем примере цикл продублирован два раза. Для порядку надо убрать лишнее
Reply | Reply with quote | Quote
 
 
0 # xternalx 2010-12-26 01:00
fixed!
Reply | Reply with quote | Quote
 

Add comment


Security code
Refresh