Порядок таблицы Lua в порядке убывания (от самого высокого до самого низкого)

Я перепробовал все, чтобы попытаться упорядочить этот стол lua от наивысшего к низшему. Я смотрел на другие потоки stackru, по всей сети, и это не работает.

local DTable = {}
local SC = 0
for e,q in pairs(LastATP) do
  local CT = {e,q}
  SC = SC + 1
  table.insert(DTable, SC, CT)
end         

table.sort(DTable, function(a, b) return a[2] < b[2] end)

"E" - это случайный ключ, например) dxh3qw89fh39fh - тогда как q - это число. Пожалуйста помоги. Я перепробовал все. Когда я пытаюсь перебрать отсортированную таблицу, я также использую "для i, v в ipairs(DTable)" - ответы скоро, пожалуйста!

1 ответ

Решение

table.sortкомпаратор действует как < - он использует его для упорядочения значений в списке так, чтобы наименьшее было первым, а наибольшее последним. Это выглядит как

первый <второй <третий <.... <последний

Если вы хотите отменить этот порядок, вы должны дать ему "> операция "вместо:

первый> второй> третий>....> последний

-- Sort `DTable` by the second value in the pair, decreasing
table.sort(DTable, function(a, b) return a[2] > b[2] end)

В своем вопросе вы сказали, что значения как q были номера. Если они на самом деле являются строками, но вы хотите отсортировать их как числа, вы должны использовать tonumber конвертировать их:

-- Note that keeping track of "SC" is not necessary, it is just the
-- length of DTable, which is where table.insert inserts by default
table.insert(DTable, {e, tonumber(q)}))
Другие вопросы по тегам