From 2dfc64ffd650819d92dfda7f6f8a1b646494cbc0 Mon Sep 17 00:00:00 2001 From: shagu Date: Sun, 10 Oct 2021 14:26:05 +0200 Subject: [PATCH] helpers: add sorted pairs function --- helpers.lua | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/helpers.lua b/helpers.lua index 130e432..24be1f1 100644 --- a/helpers.lua +++ b/helpers.lua @@ -252,3 +252,38 @@ ShaguTweaks.Abbreviate = function(number, eachk) return number end + +-- http://lua-users.org/wiki/SortedIteration +local function __genOrderedIndex( t ) + local orderedIndex = {} + for key in pairs(t) do + table.insert( orderedIndex, key ) + end + table.sort( orderedIndex ) + return orderedIndex +end + +local function orderedNext(t, state) + local key = nil + if state == nil then + t.__orderedIndex = __genOrderedIndex( t ) + key = t.__orderedIndex[1] + else + for i = 1,table.getn(t.__orderedIndex) do + if t.__orderedIndex[i] == state then + key = t.__orderedIndex[i+1] + end + end + end + + if key then + return key, t[key] + end + + t.__orderedIndex = nil + return +end + +ShaguTweaks.spairs = function(t) + return orderedNext, t, nil +end