Table.sort (Lua)

Материал из UoPilot
Версия от 11:24, 28 августа 2019; Tatikoma (обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к навигации Перейти к поиску

Описание

table.sort - сортирует массив в заданном порядке.

Синтаксис

Привязка к окну: Нет.
Работа со свернутым окном: Да.
Все параметры заключаются в скобки и разделяются запятыми.

table.sort (<array> [, comp])

Где:
<array> - массив.
[, comp] - необязательный параметр. Если параметр задан, то он должен быть функцией, которая для двух получаемых параметров возвращает true если первый из них меньше второго.

Примеры

--lua
local arr = {20, 30, 10, 50}
log ("clear") log ("mode compact")
log ("Массив до сортировки")
for i = 1, #arr do
    log (arr[i])
end
table.sort(arr)    -- сортировать массив
log ("Массив после сортировки")
for i = 1, #arr do
    log (arr[i])
end
--lua
local arr = {20, -30, 10, -50}
log ("clear") log ("mode compact")
log ("Массив до сортировки:")
for i = 1, #arr do
    log (arr[i])
end
table.sort(arr)
log ("Массив после сортировки:")
for i = 1, #arr do
    log (arr[i])
end
--lua
-- сортировка по убыванию
local arr = {20, 30, 10, 50}
log ("clear") log ("mode compact")
log ("Массив до сортировки:")
for i = 1, #arr do
    log (arr[i])
end
table.sort (arr, function (a, b) return (a > b) end)
log ("Массив после сортировки:")
for i = 1, #arr do
    log (arr[i])
end
--lua
log ("clear") log ("mode compact")
 
-- функция сортировки по первому элементу, следующие не учитываются
function mySort(a,b)
    if  a[1] < b [1] then
        return true
    end
    return false
end 

local arr = {}
table.insert(arr, {20, 10, 15})
table.insert(arr,  {15, 5, 13})
table.insert(arr,  {15, 7, 13})  

log ("Массив до сортировки:")
for i = 1, #arr do
    log (table.concat(arr[i], ","))
end
table.sort(arr, mySort)    -- сортировка
log ("Массив после сортировки:")
for i = 1, #arr do
    log (table.concat(arr[i], ","))
end
--lua
log ("clear") log ("mode compact")

-- функция сортировки по первом двум элементам, если первые равны, то сравниваются вторые
function mySort(a,b)
    if  a[1] < b [1] then
        return true
    else
        if  a[1] == b [1] and a[2] < b [2] then   -- если первые элементы равны, сравнить вторые
            return true
        end
    end
        return false
end

local arr = {}
arr[#arr+1]={20, 10, 15}
arr[#arr+1]={15, 4, 13}
arr[#arr+1]={15, 5, 17}

log ("Массив до сортировки:")
for i = 1, #arr do
    log (table.concat(arr[i], ","))
end
table.sort(arr, mySort)    -- сортировка
log ("Массив после сортировки:")
for i = 1, #arr do
    log (table.concat(arr[i], ","))
end
--lua
log ("clear") log ("mode compact")
local arr = {}
arr[#arr+1]={20, 10, 15}
arr[#arr+1]={15, 4, 13}
arr[#arr+1]={15, 5, 17}

log ("Массив до сортировки:")
for i = 1, #arr do
    log (table.concat(arr[i], ","))
end
table.sort(arr, function (a,b) return (a[3] < b[3]) end)    -- сортировка по 3му элементу
log ("Массив после сортировки:")
for i = 1, #arr do
    log (table.concat(arr[i], ","))
end

Смотрите также

table.insert (Lua)
table.remove (Lua)
table.concat (Lua)
unpack (Lua)
table.maxn (Lua)