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 на достаточно доступном языке изложения. Например на эти
[url]http://ilovelua.narod.ru/about_lua.html[/url]
[url]http://www.script-coding.com/Lua.html[/url]
[url]http://steps3d.narod.ru/tutorials/lua-tutorial.html[/url]
На выбор. А лучше все, один за одним.

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 вы уже знаете )

10

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

Не могу разобраться, почему-то криво работает.
Есть
importTable = {{}};
importLine = {};

importLine запоняется каким то значениями
importLine[n]=str;   где n = 1..N

Потом его присваваем как бы строке таблицы
importTable[iLine] = importLine; где iLine = 1..3
Все строки разные

print(importLine[1], importLine[2]); даёт
2020.09.14 12:25:48    1963032781370132336
2020.09.14 16:02:07    1963032781370803101
2020.09.15 10:04:08    1936574137854137354

print(iLine, importTable[iLine][1], importTable[iLine][2]); даёт
1    2020.09.14 12:25:48    1963032781370132336
2    2020.09.14 16:02:07    1963032781370803101
3    2020.09.15 10:04:08    1936574137854137354

Но такой вывод
print(1,importTable[1][1],importTable[1][2]);
print(2,importTable[2][1],importTable[2][2]);
print(3,importTable[3][1],importTable[3][2]);
деёт везде одиниковые значения
1    2020.09.15 10:04:08    1936574137854137354
2    2020.09.15 10:04:08    1936574137854137354
3    2020.09.15 10:04:08    1936574137854137354

Что за бред ?