44 lines
1.0 KiB
Lua
44 lines
1.0 KiB
Lua
function showTable(tbl)
|
|
if type(tbl)=='table' then
|
|
local result = {}
|
|
for _, val in pairs(tbl) do
|
|
table.insert(result, showTable(val))
|
|
end
|
|
return '{' .. table.concat(result, ', ') .. '}'
|
|
else
|
|
return (tostring(tbl))
|
|
end
|
|
end
|
|
|
|
function sortTable(op)
|
|
local tbl = op.table or {}
|
|
local column = op.column or 1
|
|
local reverse = op.reverse or false
|
|
local cmp = op.cmp or (function (a, b) return a < b end)
|
|
local compareTables = function (a, b)
|
|
local result = cmp(a[column], b[column])
|
|
if reverse then return not result else return result end
|
|
end
|
|
table.sort(tbl, compareTables)
|
|
end
|
|
|
|
A = {{"quail", "deer", "snake"},
|
|
{"dalmation", "bear", "fox"},
|
|
{"ant", "cougar", "coyote"}}
|
|
print('original', showTable(A))
|
|
|
|
sortTable{table=A}
|
|
print('defaults', showTable(A))
|
|
|
|
sortTable{table=A, column=2}
|
|
print('col 2 ', showTable(A))
|
|
|
|
sortTable{table=A, column=3}
|
|
print('col 3 ', showTable(A))
|
|
|
|
sortTable{table=A, column=3, reverse=true}
|
|
print('col 3 rev', showTable(A))
|
|
|
|
sortTable{table=A, cmp=(function (a, b) return #a < #b end)}
|
|
print('by length', showTable(A))
|