1

Тема: Двумерный массив

Перекопал везде информацию. Нигде адекватно так и не написано, как создать обычный двумерный массив.
Массив
BAZA={}
Чтобы потом как в нормальном языке обратиться к элементу
BAZA[x][y]=q

2 (2015-05-01 18:34:04 отредактировано swerg)

Re: Двумерный массив

Для простоты пишу print, понятно, что это вывод на экран указанного содержимого.

T = {{11,12,13},{21,22,23},{31,32,33}}

print (T[1][3]) -- выведет 13
print (T[2][1]) -- выведет 21

-- можно создавать даже массивы не прямоугольной (неоднородной) размерности:

T = {{11,12,13,14,15},{21,22},{31,32,33,34}}

print (T[1][3])  -- выведет 13
print (T[1][5])  -- выведет 15
print (T[2][2])  -- выведет 22
print (T[3][4])  -- выведет 34
print (T[2][8])  -- ошибки не будет, выведет nil, такого элемента [8] нет, но по индексу [2] у нас таблица, так что применять операцию "взятия элемента по индексу" можно
print (T[4][5])  -- при наличии такой строки скрипт остановится с ошибкой "attempt to index field '?' (a nil value)", здесь у нас для первого индекса 4 уже нет элемента в таблице, т.е. nil, а мы к этому nil, т.е. не таблице, пытаемся индексироваться [5], это уже ошибка

Фактически многомерный массив - это таблица, элементами которой тоже являются таблицы.

3 (2016-09-29 11:33:05 отредактировано sam063rus)

Re: Двумерный массив

-

4 (2015-05-01 19:25:58 отредактировано GREEN_X5)

Re: Двумерный массив

slkumax,
Ваши вопросы где-то на самом начальном уровне знакомства с программированием. Потратьте  немного своего времени максимально рационально, на учебники по LUA на достаточно доступном языке изложения. Например на эти
http://ilovelua.narod.ru/about_lua.html
http://www.script-coding.com/Lua.html
http://steps3d.narod.ru/tutorials/lua-tutorial.html
На выбор. А лучше все, один за одним.

5

Re: Двумерный массив

Что-то я совсем запутался - как объявить двумерный массив типа:
m = {
{переменная1, переменная2, ... переменнаяN},
{переменная1, переменная2, ... переменнаяN}
..
{переменная1, переменная2, ... переменнаяN}
}
Чтобы потом можно было обращаться к переменным как к ячейкам двумерного массива:
m[1]["переменная1"] = 1
??

6 (2015-10-27 01:32:08 отредактировано kalikazandr)

Re: Двумерный массив

В вашем случае {переменная1, переменная2, ... переменнаяN} тоже массив с ключами [1],[2]...[N]

m = {
[1] = {переменная1, переменная2, ... переменнаяN},
[2] = {переменная1, переменная2, ... переменнаяN},--запятую не забываем ставить
..
[N] = {переменная1, переменная2, ... переменнаяN}--в последнем элементе можно не ставить
}
поэтому обращение к ячейкам:
per1_1 = m[1][1]--из m[1]

per1_2 = m[2][1]--из m[2]

mapN= m[#m]--эквивалентно m[N]
per_N = mapN[#mapN]

Вот таким способом:
m[1]["переменная1"] = 1

вы превратите массив хранящийся в m[1]  в таблицу луа и длину таблицы #mapN-способом не узнать:
{["переменная1"]  = 1,  [1] = переменная1,  [2] = переменная2,.. [N] = переменнаяN}

7

Re: Двумерный массив

Metallurg пишет:

Чтобы потом можно было обращаться к переменным как к ячейкам двумерного массива:
m[1]["переменная1"] = 1
??

m = {{}, {}, {}, {}, {}}

m[1]["aa"] = 1
m[2]["bb"] = 2
m[5]["ee"] = 5

При этом размерность (диапазон) первого индекса жёстко задаётся тем, сколько пустых таблиц проинициализировано первой строкой. Если в приведённом примере написать

m[6]["zz"] = 99

то будет ошибка, т.к. элемент номер 6 не проинициализирован как таблица, соответственно как к таблице к нему обращаться нельзя.
Это не то чтобы проблема, всё легко решается, просто в зависимости от задачи решения можно выдумать разные.

8 (2015-10-27 21:28:46 отредактировано Metallurg)

Re: Двумерный массив

korovin пишет:

то будет ошибка, т.к. элемент номер 6 не проинициализирован как таблица, соответственно как к таблице к нему обращаться нельзя.
Это не то чтобы проблема, всё легко решается, просто в зависимости от задачи решения можно выдумать разные.

Спасибо за объяснение! Но как тогда расширить таблицу, чтобы можно было обращаться к элементу номер 6?
И как наиболее просто проинициализировать таблицу, чтобы она имела такой вид?
m = {{}}
Так?

ps. использовал вариант с table.insert, но он кажется каким-то топорным:
for i = 1, 8000 do
table.insert(m, i, {})
end

9

Re: Двумерный массив

Metallurg пишет:

ps. использовал вариант с table.insert, но он кажется каким-то топорным

Именно insert и надо использовать.
На остальные вопросы не отвечаю, т.к. про table.insert вы уже знаете )