Как отсортировать таблицу с таблицами? - PullRequest
0 голосов
/ 21 марта 2020

Как отсортировать таблицу в моем случае по идентификатору?

У меня есть выходная таблица из файла json, и да, в моей таблице у меня нулевые значения, где нет таблицы. Таблица ввода для сортировки:

local tbl = {1=0, 2=0, 3={ id='1' }, 4={ id='2' }, 5={ id='3'}, 6=0}

и сортировка веселья c

    local pos = 1
    local sort = function(data)
        for i = 1 , table.maxn(data) do
            if (data[i-1] != 0) and (data[i] == 0) then -- Find next value
                pos = i
            elseif (data[i] == 0) then
                pos = i
            end
            if (data[i] != 0) and (i > pos) then -- Change value
                if (data[i-1] == 0) and (i > 0) then
                    data[pos] = data[i]
                    data[i] = 0
                    pos = i
                    hasChanged = true
                    print(data[i])
                    sort(data)
                end         
            end
        end
    end
    sort(data)

В моем случае это хорошая работа, но если мне нужна сортировка с некоторыми значениями, я не знаю как ...

1 Ответ

2 голосов
/ 21 марта 2020

table.sort включает параметр, который можно использовать, чтобы указать, как сравнивать элементы таблицы. Следующая функция предполагает, что нули должны go в конце после любых таблиц. Неверные данные не учитываются. Обратите внимание, что функция должна возвращать false для одинаковых аргументов.

local function lessThan(a, b)
  if a == 0 then
    -- a is either equal to b, or it has to go at the end.
    return false
  elseif b == 0 then
    -- b has to go at the end.
    return true
  else
    -- Neither argument is 0.
    return a.id < b.id
  end
end

table.sort(tbl, lessThan)

Если ваша таблица не является допустимой последовательностью (она содержит nil с), вы можете использовать pairs и поместить элементы в новую таблицу перед вызовом table.sort.

local array = {}
for _, v in pairs(tbl) do
  table.insert(array, v)
end
table.sort(array, lessThan)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...