2016-08-23 4 views
2

У меня есть конкретная таблица с натуральным числовым ключом и строковым значением, подобным этому {"192", "127", "114", "186"}, ее можно назвать упорядоченной таблицей, а другая таблица является подмножеством упорядоченной таблицы, но не соответствует порядку, например {"114", "192"}. Как я могу сортировать последнюю по упорядоченной таблице ???Как отсортировать таблицу в соответствии с другой упорядоченной таблицей?

+0

не может передавать значение строки в номер –

ответ

2

Одна вещь, которую вы можете сделать, это создать вспомогательную таблицу, которая отображает строку в ее позицию в «упорядоченной таблице». Это позволяет вам быстро увидеть, учитывая две строки, которые должны отображаться перед другими.

Затем вы можете использовать эту вспомогательную таблицу для реализации функции сравнения для вашего вида. В Lua table.sort имеет необязательный параметр, который является пользовательской функцией сравнения. Эта функция сравнения должна принимать пару значений из таблицы (s1 и s2) и должна возвращать true, если s1 < s2 в соответствии с вашим желаемым заказом.

ordered_table = {"192", "127", "114", "186"} 

indexes = {} 
for i, s in ipairs(ordered_table) do 
    indexes[s] = i 
end 

unordered_table = {"114", "192"} 
table.sort(unordered_table, function(s1, s2) 
    local i1 = assert(indexes[s1]) 
    local i2 = assert(indexes[s2]) 
    return i1 < i2 
end) 
Смежные вопросы