двумерный массив lua
Что-то не могу понять.
Мне нужен двумерный массив. Мне надо для каждого игрока хранить 6 значений.
Т.е сначала [id], а после [1...6] значение.
Делал так:
local x = {{}}
Но не работает.

Лучший ответ:
создаём основную таблицу:
table = {}
создаём в ней ещё таблицы, чтобы можно было к ним обращаться
for i = 0, 10 do
table[i] = {}
end
т.е. сейчас можно обратиться к table[0][0] и не получить ошибку
если нужна ещё большая глубина таблицы, создаёте ещё:
table[0][0] = {}
table[0][0][1] = "Good"
а вообще вот тут можно потестить всё прежде чем приступать к переносу в варик


Views: 645

» Лучшие комментарии


Extremator #1 - 1 year ago 0
Голосов: +0 / -0
Для каждого игрока 6 значений... Что мешает создать 6 пеменных под каждый тип значений и использовать номер массива в нихтвтроли номера игрока к которому прикреплено значение?
noyl #2 - 1 year ago 0
Голосов: +0 / -0
Extremator:
Для каждого игрока 6 значений... Что мешает создать 6 пеменных под каждый тип значений и использовать номер массива в нихтвтроли номера игрока к которому прикреплено значение?
Тогда будут лишнии манипуляции. Для моих целей нужно именно так к переменно обратиться.
Условно говоря: x[id][1..6] = y
N1ghtSiren #3 - 1 year ago (изм. ) 3
Голосов: +3 / -0

создаём основную таблицу:
table = {}
создаём в ней ещё таблицы, чтобы можно было к ним обращаться
for i = 0, 10 do
table[i] = {}
end
т.е. сейчас можно обратиться к table[0][0] и не получить ошибку
если нужна ещё большая глубина таблицы, создаёте ещё:
table[0][0] = {}
table[0][0][1] = "Good"
а вообще вот тут можно потестить всё прежде чем приступать к переносу в варик
pro100master #4 - 1 year ago 0
Голосов: +0 / -0
PyCCKuu_4eJl, что за страный совет кода=)
Нет нужды цикл делать если можно при вызове [] через волшебную функцию в мета таблице и легче (Условно что если его ранее не вызван и не создан не будет занимать ячейки) Но когда его вызван и тут уже создает для игрока массив а там уже заполняет условно есть или нет
Drulia_san #5 - 1 year ago 0
Голосов: +0 / -0
pro100master:
PyCCKuu_4eJl, что за страный совет кода=)
Нет нужды цикл делать если можно при вызове [] через волшебную функцию в мета таблице и легче (Условно что если его ранее не вызван и не создан не будет занимать ячейки) Но когда его вызван и тут уже создает для игрока массив а там уже заполняет условно есть или нет
Ни слова не понял из того что ты сказал
N1ghtSiren #6 - 1 year ago 4
Голосов: +4 / -0
pro100master, метатаблицы это сложновато, я сам до конца ещё не понял где и правильно их можно использовать
а тут по факту - нужно - создали - заполнили, пара лишних пустых таблиц в любом случае вреда не принесёт
NazarPunk #8 - 1 year ago 0
Голосов: +0 / -0
И почему так сложно заглянуть в документацию?
Для шести значений можно и одномерный массив использовать
do
	local mytable = {}
	local length  = 6
	
	---@param player player
	---@param num integer
	---@param value any
	function SetPlayerValue(player, num, value)
		mytable[GetPlayerId(player) * length + num - 1] = value
	end
	
	---GetPlayerValue
	---@param player player
	---@param num integer
	---@return any
	function GetPlayerValue(player, num)
		return mytable[GetPlayerId(player) * length + num - 1]
	end
end

GetPlayerValue(GetTriggerPlayer(), 6) --> шестое значение для GetTriggerPlayer
Extremator #9 - 1 year ago 0
Голосов: +0 / -0
noyl, ну они у тебя в любом случае будут, эти лишние манипуляции.
И если хочешь получать/посылать число указывая номер игрока и число - тогда либо хеш-таблица (именно так они и работают), либо писать функцию в которую будешь посылать нужные аргументы, и получать соответствующие результаты... да, знаю, звучит абстрактно...
NazarPunk #10 - 1 year ago 5
Голосов: +5 / -0
И если хочешь получать/посылать число указывая номер игрока и число - тогда либо хеш-таблица (именно так они и работают)
Хэштаблицы в lua это глупо
Drulia_san #12 - 1 year ago 0
Голосов: +0 / -0
NazarPunk:
И если хочешь получать/посылать число указывая номер игрока и число - тогда либо хеш-таблица (именно так они и работают)
Хэштаблицы в lua это глупо
Я просто уже по привычке написал систему луашных хештаблиц)
Работает на обычных таблицах, создается, читается подобно варкрафтовской, только умеет луашные объекты сохранять, может это и извращение, но этим можно на раз-два быстро заменить все хеш-табличные вызовы в игре
Nelloy #13 - 1 year ago 0
Голосов: +0 / -0
Drulia_san, написать систему хештаблиц на языке основанном на хештаблицах...
Clamp #14 - 1 year ago 2
Голосов: +2 / -0
Nelloy, LUA базируется на таблицах и метатаблицах, но при чём тут хэш-таблицы?