Browse Source

[Minor] Add spairs function to lua lib

tags/1.7.0
Vsevolod Stakhov 6 years ago
parent
commit
f28e506d40
1 changed files with 34 additions and 0 deletions
  1. 34
    0
      lualib/lua_util.lua

+ 34
- 0
lualib/lua_util.lua View File

@@ -165,4 +165,38 @@ exports.unpack = function(t)
return unpack_function(t)
end

-- Sorted iteration:
-- for k,v in spairs(t) do ... end
--
-- or with custom comparison:
-- for k, v in spairs(t, function(t, a, b) return t[a] < t[b] end)
--
-- optional limit is also available (e.g. return top X elements)
local function spairs(t, order, lim)
-- collect the keys
local keys = {}
for k in pairs(t) do keys[#keys+1] = k end

-- if order function given, sort by it by passing the table and keys a, b,
-- otherwise just sort the keys
if order then
table.sort(keys, function(a,b) return order(t, a, b) end)
else
table.sort(keys)
end

-- return the iterator function
local i = 0
return function()
i = i + 1
if not lim or i <= lim then
if keys[i] then
return keys[i], t[keys[i]]
end
end
end
end

exports.spairs = spairs

return exports

Loading…
Cancel
Save