Добавьте в таблицу только 10 значений - PullRequest
0 голосов
/ 30 мая 2018

Как я могу добавить в таблицу только максимум 10 пользователей?Поскольку я сохраняю ScoreTBL в TXT, и этот файл содержит более 100 строк: / Итак, я хочу сохранить только 10 пользователей.

Я не знаю, как я могу проверить, есть ли имя пользователя в таблице, и недобавить этого пользователя или нет это имя пользователя в таблицу и добавить его?

Пример:

local scoretbl = {}
local num = 0
for i=1, 10 do
    table.insert(scoretbl,{'Name '..i, 100 + num})
    num = num + 100
end

local function AddToTable(name, score)
    if table.HasValue(scoretbl,name) then return end // hmm its not work ?
        table.insert(scoretbl,{name, score})
end

AddToTable('User 55', 5454)// 11 user
AddToTable('User 55', 5454)// check: only one username in table

AddToTable('User 32', 5454)// 12 user

local function ShowOnly10()
table.sort( scoretbl, function( a, b ) return a[2] > b[2] end )

//table.remove(scoretbl,#scoretbl) remove last index in table, if i need only 10 value, i need delete in cycle ?

    for k, v in pairs(scoretbl) do
        print(k ,v[1], v[2])
    end
end
ShowOnly10()

// upd: может быть, его исправить имя пользователя?

local function AddToTable(name, score)
    for k, v in pairs(scoretbl) do
        if v[1] == name then return false end
    end
    table.insert(scoretbl,{name, score}) 
end

1 Ответ

0 голосов
/ 30 мая 2018

Я рекомендую вам использовать хеш-таблицу Lua, v.name и v.score легче читать, чем v[1] и v[2].

Функция table.HasValue не существует.Вы должны написать свой собственный.

Когда вы хотите напечатать только первые десять элементов, вы должны выполнять итерации только по первым десяти (или до длины таблицы, если она меньше десяти элементов).

Комментарии к строке в Lua начинаются с --, а не //.

local scoretbl = {}

for i = 1,10 do
    table.insert(scoretbl, { name = 'Name '..i, score = 100*i })
end

local function AddToTable(name, score)
    -- Walk the whole table to find whether a name exists
    for i,v in ipairs(scoretbl) do
        if v.name == name then
            -- if the record is present, update it
            scoretbl[i].score = score
            return
        end
    end
    -- Insert new record
    table.insert(scoretbl, { name = name, score = score })
end

AddToTable('User 55', 5454) -- 11 users
AddToTable('User 55', 5454) -- check: only one username in table
AddToTable('User 32', 5454) -- 12 users

local function ShowOnly10()
    table.sort(scoretbl,function(a,b) return a.score > b.score end)

    for i = 1,math.min(#scoretbl,10) do
        print(i, scoretbl[i].name, scoretbl[i].score)
    end
end

ShowOnly10()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...