Тема: Двумерный массив
Перекопал везде информацию. Нигде адекватно так и не написано, как создать обычный двумерный массив.
Массив
BAZA={}
Чтобы потом как в нормальном языке обратиться к элементу
BAZA[x][y]=q
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
QUIK -> DDE → Lua: учебники, общие вопросы → Двумерный массив
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Перекопал везде информацию. Нигде адекватно так и не написано, как создать обычный двумерный массив.
Массив
BAZA={}
Чтобы потом как в нормальном языке обратиться к элементу
BAZA[x][y]=q
Для простоты пишу 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], это уже ошибка
Фактически многомерный массив - это таблица, элементами которой тоже являются таблицы.
-
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]
На выбор. А лучше все, один за одним.
Что-то я совсем запутался - как объявить двумерный массив типа:
m = {
{переменная1, переменная2, ... переменнаяN},
{переменная1, переменная2, ... переменнаяN}
..
{переменная1, переменная2, ... переменнаяN}
}
Чтобы потом можно было обращаться к переменным как к ячейкам двумерного массива:
m[1]["переменная1"] = 1
??
В вашем случае {переменная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}
Чтобы потом можно было обращаться к переменным как к ячейкам двумерного массива:
m[1]["переменная1"] = 1
??
m = {{}, {}, {}, {}, {}}
m[1]["aa"] = 1
m[2]["bb"] = 2
m[5]["ee"] = 5
При этом размерность (диапазон) первого индекса жёстко задаётся тем, сколько пустых таблиц проинициализировано первой строкой. Если в приведённом примере написать
m[6]["zz"] = 99
то будет ошибка, т.к. элемент номер 6 не проинициализирован как таблица, соответственно как к таблице к нему обращаться нельзя.
Это не то чтобы проблема, всё легко решается, просто в зависимости от задачи решения можно выдумать разные.
то будет ошибка, т.к. элемент номер 6 не проинициализирован как таблица, соответственно как к таблице к нему обращаться нельзя.
Это не то чтобы проблема, всё легко решается, просто в зависимости от задачи решения можно выдумать разные.
Спасибо за объяснение! Но как тогда расширить таблицу, чтобы можно было обращаться к элементу номер 6?
И как наиболее просто проинициализировать таблицу, чтобы она имела такой вид?
m = {{}}
Так?
ps. использовал вариант с table.insert, но он кажется каким-то топорным:
for i = 1, 8000 do
table.insert(m, i, {})
end
ps. использовал вариант с table.insert, но он кажется каким-то топорным
Именно insert и надо использовать.
На остальные вопросы не отвечаю, т.к. про table.insert вы уже знаете )
Не могу разобраться, почему-то криво работает.
Есть
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
Что за бред ?
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
QUIK -> DDE → Lua: учебники, общие вопросы → Двумерный массив
Форум работает на PunBB, при поддержке Informer Technologies, Inc