whiteblXK
whiteblXK

Reputation: 137

Most optimized way to get value from table

I need to check if first value is >= 'from' and second value is <= 'to', if true then my function retun number. It's working but I don't know if this is the best and most optimized way to get value(number from table).

local table = {
    {from = -1, to = 12483, number = 0},
    {from = 12484, to = 31211, number = 1},
    {from = 31212, to = 53057, number = 2},
    {from = 53058, to = 90200, number = 3},
    {from = 90201, to = 153341, number = 4},
    {from = 153342, to = 443162, number = 5},
    {from = 443163, to = 753380, number = 6},
    {from = 753381, to = 1280747, number = 7},
    {from = 1280748, to = 2689570, number = 8},
    {from = 2689571, to = 6723927, number = 9},
    {from = 6723928, to = 6723928, number = 10}
}

local exampleFromValue = 31244
local exampleToValue = 42057

local function getNumber()
    local number = 0
    for k, v in pairs(table) do
        if (v.from and exampleFromValue >= v.from) and (v.to and exampleToValue <= v.to) then
            number = v.number
            break
        end
    end 

    return number
end

print(getNumber())

Upvotes: 0

Views: 73

Answers (1)

IS4
IS4

Reputation: 13217

With this small amount of data, such function doesn't seem like a performace issue. However, you can compress the data a bit:

local t = {
  12484, 31212, 53058, 90201, 153342, 443163, 753381, 1280748, 2689571, 6723928
}

local exampleFromValue = 31244
local exampleToValue = 42057

local function getNumber()
  local last = -1
  for i, v in ipairs(t) do
    if exampleFromValue >= last and exampleToValue < v then
      return i - 1
    end
    last = v
  end
  return 0
end

Upvotes: 1

Related Questions