Lua как используя unpack найти максимальное по модулю отрицательное число в строке таблице

Lua как используя unpack найти максимальное по модулю отрицательное число в строке таблице?

os.setlocale(""); -- Установка корректной кодировки

tbl = { { "C",       2,     1,     0,     0,     0,    0,    0    },
        { "базис",   1,     2,     3,     4,     5,    6,   "b"   },
        {    3,     -4,    -6,     1,     0,     0,    0,   -20   },
        {    4,     -2,     5,     0,     1,     0,    0,    27   },
        {    5,      7,     5,     0,     0,     1,    0,    63   },
        {    6,      3,    -2,     0,     0,     0,    1,    23   },
        {  "d",                                                   } }

print( math.max(unpack(tbl[2], 2, #tbl[1] - 1)) )

print( math.max(unpack(tbl[3])) )

Наверное это можно сделать с помощью возможностей unpack, чтобы не перебирать вручную элементы строки таблицы.

Заранее спасибо.


Ответы (1 шт):

Автор решения: ESkri

Тут поможет метатаблица для чисел

local tbl = {
   { "C",       2,     1,     0,     0,     0,    0,    0    },
   { "базис",   1,     2,     3,     4,     5,    6,   "b"   },
   {    3,     -4,    -6,     1,     0,     0,    0,   -20   },
   {    4,     -2,     5,     0,     1,     0,    0,    27   },
   {    5,      7,     5,     0,     0,     1,    0,    63   },
   {    6,      3,    -2,     0,     0,     0,    1,    23   },
   {  "d",                                                   }
}

-- При сравнении любого числа с любой строкой число будет меньше строки
debug.setmetatable(0, {__lt = function (a,b) return type(a) == "number" end})

-- Строки будут считаться больше чисел и не повлияют на поиск минимального числа
for n, line in ipairs(tbl) do
   print(n, math.min(table.unpack(line)))
end

Выхлоп:

1     0
2     1
3   -20
4    -2
5     0
6    -2
7   d
→ Ссылка