Сортировка массива таблиц - PullRequest
4 голосов
/ 14 февраля 2020

Это может быть проще, чем я сам. Я относительно новичок в Lua, но имею опыт работы с другими языками.

У меня есть таблица, которая выглядит следующим образом:

local state = {}
state[1] = {
   show = true,
   changed = true,
   progressType = "static",
   value = 0,
   total = 9,
   name = "nine",
}

state[2] = {
   show = true,
   changed = true,
   progressType = "static",
   value = 0,
   total = 7,
   name = "seven",
}

state[3] = {
   show = true,
   changed = true,
   progressType = "static",
   value = 0,
   total = 8,
   name = "eight",
}

state[4] = {
   show = true,
   changed = true,
   progressType = "static",
   value = 0,
   total = 6,
   name = "six",
}

Что мне нужно сделать, это отсортировать каждый table[] запись основана на значении table.value5. Я не могу найти никаких функций в документах, которые прямо говорят, что они делают больше, чем просто основы c table.sort, так что я немного застрял. Нужно ли сортировать вручную, перебирая и создавая новую таблицу с отсортированными данными?

1 Ответ

4 голосов
/ 14 февраля 2020

Я не могу найти никаких функций в документах, которые прямо говорят, что они делают больше, чем просто c table.sort, так что я немного застрял.

Возможно, я неправильно понимаю вашу проблему, но table.sort это именно то, что вам нужно в этом случае:

local state = {}
state[1] = {
   total = 9,
   name = "nine",
}

state[2] = {
   total = 7,
   name = "seven",
}

state[3] = {
   total = 8,
   name = "eight",
}

state[4] = {
   total = 6,
   name = "six",
}

-- Use table.sort with a custom anonymous function
-- to specify how to compare the nested tables.
table.sort(state, function (a, b) 
    return a.total < b.total
end)

for i=1, #state do
  print(i, state[i].name)
end

С помощью table.sort вы можете предоставить дополнительную пользовательскую функцию, что может быть так просто или сложно, как вы хотите. В этом случае (согласно вашему вопросу) достаточно просто сравнить total значения вашей таблицы.

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