Если я правильно понял, пример таблицы, которую вы написали в первом блоке кода, был бы тем, что вы назвали tableData
во втором, верно? Итак, что вы хотите иметь:
- массив игроков
- Каждая запись в этом массиве представляет собой таблицу
- Способ получения каждого поля каждого player
С помощью нескольких настроек мы можем сделать ваш код более читабельным и, следовательно, исправить его. Во-первых, я бы переименовал некоторые вещи:
- Переименуйте вашу таблицу
players
, поскольку это массив игроков
local players = {
{
rpname = "john",
SteamID = "STEAM_0:0:1",
giftsFound = "4",
},
-- [...]
}
- Переименуйте ваши переменные в for-l oop
- В Lua обычной практикой является использование
_
для именования переменной, которую мы не собираемся использовать. В этом случае ключ (первоначально названный k
) не будет использоваться нами. - Поскольку это список игроков, каждая запись является игроком, поэтому логично переименовать переменную
v
на player
. - Кроме того, я изменил
pairs()
на ipairs()
, и для этого есть веская причина. Я не буду освещать это здесь, но здесь объясняется как можно лучше. Практическое правило: если ваша таблица похожа на массив, используйте ipairs()
; иначе используйте pairs()
.
for _, player in ipairs(players) do
-- [...]
end
- Для вложенного for-l oop имеет смысл использовать
k
, v
и pairs
, поэтому это будет что-то вроде этого:
for k, v in pairs(player) do
print(k,v)
end
Запуск полной части приведет к следующему:
rpname john
giftsFound 4
SteamID STEAM_0:0:1
Я полагаю, это решит вашу проблему. Настоящие ошибки в вашем коде заключались в том, что вы пытались получить доступ к полю вложенной таблицы и, возможно, именовали переменные с именами, которые вы уже использовали (k
и v
) в той же области, что в лучшем случае вводит в заблуждение.
Если вы хотите получить доступ к указанному полю c в таблице, вместо того, чтобы просматривать все это, вы можете сделать:
-- To print every player's name
for _, player in ipairs(players) do
local name = player.rpname
print(name)
end
или даже:
-- To get the first player's (in the array) name
local name = players[1].rpname
И последнее: «Lua» не является аббревиатурой, вам не нужно использовать все заглавные буквы. Lua был создан в Бразилии и здесь мы говорим на португальском. Lua означает Луна на португальском языке.