Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

MyDC.ru _ Помощь по скриптам для PtokaX _ Помогите с сортировкой таблицы

Автор: dimajak 27.1.2010, 23:47

Запутался с таблицами. Не пойму как сделать соритровку таблицы, у которой индекс строковый и данные сидят во вложенной таблице, но индекс числовой.
В скрипте "Snowball War" данные по игрокам хранятся в таблице вида:

Код
SnowTable = {
    ["start"] = {
        [1] = "January 19 2010",
        [2] = "11:52:03",
    },
    ["dimka570"] = {
        [6] = 0,
        [2] = 5,
        [3] = 0,
        [1] = 570,
        [4] = "Лейтенант-коммандор",
        [5] = 0,
        [7] = 0,
    },
    ["dimka578"] = {
        [6] = 0,
        [2] = 5,
        [3] = 0,
        [1] = 578,
        [4] = "Лейтенант-коммандор",
        [5] = 0,
        [7] = 0,
    },
    ["dimka294"] = {
        [6] = 0,
        [2] = 5,
        [3] = 0,
        [1] = 294,
        [4] = "Рыцарь лейтенант",
        [5] = 0,
        [7] = 0,
    },
    ["dimka318"] = {
        [6] = 0,
        [2] = 5,
        [3] = 0,
        [1] = 318,
        [4] = "Рыцарь капитан",
        [5] = 0,
        [7] = 0,
    },
    ["dimka124"] = {
        [6] = 0,
        [2] = 5,
        [3] = 0,
        [1] = 124,
        [4] = "Майор-сержант",
        [5] = 0,
        [7] = 0,
    },
}
вот её-то и не могу отсортировать по индексу [1] вложенной таблицы :(

Автор: Nickolya 28.1.2010, 10:32

Код
local tTemp = {}    -- временная таблица
for i, v in pairs(SnowTable) do        -- тут мы проходим по таблице рекордов
    if type(v[1]) == "number" then    -- проверка на то что поле [1] - число
        table.insert(tTemp, {i, v[1]})    -- вставка в временную таблицу таблицы со значениями [1] - индекс нашей основной таблицы и [2] - параметр [1] этой таблицы
    end
end
table.sort(tTemp, function(arg1, arg2)    -- сортировка
    return arg1[2] > arg2[2]    -- проверяем что 2 значение таблицы больше другого
end)
--[=[ на выходе получаем отсортированную временную таблицу от большего к меньшему, в виде
tTemp = {
    [1] = {
        [1] = "dimka578",
        [2] = 578,
    },
    [2] = {
        [1] = "dimka570",
        [2] = 570,
    },
    -- и так далее, прверь, а то я это набросал в блокноте, не проверял
}]=]

Автор: dimajak 1.2.2010, 21:33

Nickolya, спасибо. Я так и делал. Думал может как попроще можно.