Авторизация



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

Голосования

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

ГлавнаяСтатьиLua → двухмерные массивы в lua
двухмерные массивы в lua E-mail
User Rating: / 0
PoorBest 
Written by xternalx   
Wednesday, 04 November 2009 16:27

Вчера мне в аську постучался один из пользователей моего замечательного плагина для RnQ, позволяющего выполнять скрипты написанные на Lua.

 

Его интересовали двухмерные массивы в lua. Честно говоря, я раньше подобным касательно lua не интересовался, но тут интерес пересилил меня, и я начал расследования :)

 

 

В результате моих исследований был написан такой скрипт:

-- разрешаем сообщения отладчика в консоли
sys.enabledebugmessages()
-- создаем главную таблицу
body = {}

for i=1,10 do
    -- вставляем новую "строку" в двухмерный массив, т.е. заполнение по вертикали
    table.insert(body,{})
    for j=1,10 do
        -- заполняем массив по горизонтали 
        table.insert(body[i],i+j)
    end
end

-- выводим содержимое двухмерного массива
local str = "";
for i=1,10 do
    -- каждую "строку" массива будем сначала собирать в строку, чтобы 
    -- привести ее к удобочитаемому табличному виду
    for j=1,10 do
        str = str.."\t"..body[i][j]
    end
    -- выводим строку
    str= str.."\r\n"
end
print("\r\n"..str)

Давайте разберемся что происходит в первом цикле.

По сути, это типичная конструкция для формирования двухмерного массива. Но поскольку в lua двух-и более мерных массивов как таковых нет, на помощь приходят таблицы.

table.insert(body,{})

Здесь мы вставляем новую таблицу в качестве i-той "горизонтали" двухмерного массива, доступ к этой таблице в цикле можно будет получить по i итератору. Если бы мы описывали этот двумерный массив вручную, у нас получился бы такой код:

body = {
    {2, 3, 4, 5, 6, 7, 8, 9, 10, 11},     -- i=1
    {3, 4, 5, 6, 7, 8, 9, 10, 11, 12},    -- i=2
    -- и так далее..
    {11,  12,  13,  14,  15,  16,  17,  18,  19,  20} -- i=10
  -- j=1  j=2  j=3  j=4  j=5  j=6  j=7  j=8  j=9  j=10
}

 

Во второй части кода просто выводится содержимое двухмерного массива. Таблица будет выглядеть примерно так:

 

LUA: 
2 3 4 5 6 7 8 9 10 11
3 4 5 6 7 8 9 10 11 12
4 5 6 7 8 9 10 11 12 13
5 6 7 8 9 10 11 12 13 14
6 7 8 9 10 11 12 13 14 15
7 8 9 10 11 12 13 14 15 16
8 9 10 11 12 13 14 15 16 17
9 10 11 12 13 14 15 16 17 18
10 11 12 13 14 15 16 17 18 19
11 12 13 14 15 16 17 18 19 20

 


Last Updated on Monday, 10 May 2010 01:38
 

Add comment


Security code
Refresh