Я вот вначале вообще подумал, что вы так адресацию двухмерного массива делаете, а потом его индекс пытаетесь отсортировать... даже «Альфу» вспомнил, где такой синтаксис применялся, ну да ладно...
Решение вашей задачи есть в книжке по Lua, код оттуда: 19.3 – Sort
Код
BigTab = {}
BigTab[12.2] = {s = 11, f =22}
BigTab[11.1] = {s = 11, f =22}
BigTab[14.1] = {s = 11, f =22}
BigTab[3.32] = {s = 11, f =22}
for k, v in pairs(BigTab) do
print(tostring(k).." = "..tostring(v))
end
print()
function pairsByKeys(t, f)
local a = {}
for n in pairs(t) do table.insert(a, n) end
table.sort(a, f)
local i = 0 -- iterator variable
local iter = function () -- iterator function
i = i + 1
if a[i] == nil then return nil
else return a[i], t[a[i]]
end
end
return iter
end
for k, v in pairsByKeys(BigTab) do
print(tostring(k).." = "..tostring(v))
end
И если уж дело идёт, снежный вопрос, на который не могу найти решение, если у нас индекс массива с плавающей точкой, какую функцию использовать, что бы получить первое и/или последнее значение индекса, существует ли простой вариант без использования циклов?
Роман написал: если у нас индекс массива с плавающей точкой, какую функцию использовать, что бы получить первое и/или последнее значение индекса, существует ли простой вариант без использования циклов?
Думаю что нет. Без явной сортировки не получится. По аналогии с ф-цией pairsByKeys, можно сделать такую же ф-цию возвращающую первый и последний элементы таблицы с сортировкой по вещественному индексу:
Код
local t = {}
t[15.5] = "aaa"
t[3.1] = "bbb"
t[7.8] = "ccc"
t[115.5] = "aaa"
t[23.1] = "bbb"
t[557.8] = "ccc"
t[14.5] = "aaa"
t[43.1] = "bbb"
t[87.8] = "ccc"
function getFirstAndLastByKeys(t, f)
local a = {}
for n in pairs(t) do table.insert(a, n) end
table.sort(a, f)
return a[1], t[a[1]], a[#a], t[a[#a]]
end
local first_k, first_v, last_k, last_v = getFirstAndLastByKeys(t)
print(first_k.." = "..first_v)
print(last_k.." = "..last_v)