【测试】lua代码测试

This commit is contained in:
wxd-gaming
2024-11-15 18:07:07 +08:00
parent 3bebf1d713
commit 2cf66d3ffb
4 changed files with 539 additions and 13 deletions

View File

@@ -0,0 +1,444 @@
--- table 类扩展
--- Generated by EmmyLua(https://github.com/EmmyLua)
--- Created by 無心道(15388152619).
--- DateTime: 2024/11/13 19:43
---
function table.contains(t, value)
return table.getKey(t, value) ~= nil
end
---统计table的长度
function table.count(t)
if not t then
return 0
end
local n = 0
for _, _ in pairs(t) do
n = n + 1
end
return n
end
function table.copy(t)
---@class nt
local nt = {}
for k, v in pairs(t) do
nt[k] = v
end
return nt
end
function table.copyFrom(t, from)
for k, v in pairs(from) do
t[k] = v
end
return t
end
function table.getKey(t, value)
for k, v in pairs(t) do
if v == value then
return k
end
end
return nil
end
function table.getValue(t, key)
for k, v in pairs(t) do
if k == key then
return v
end
end
return nil
end
function table.isArray(t)
for i = 1, table.count(t) do
if not t[i] then
return false
end
end
return true
end
function table.isNullOrEmpty(t)
return table.isEmpty(t)
end
function table.notNullOrEmpty(t)
return not table.isEmpty(t)
end
function table.isEmpty(t)
if type(t) ~= "table" then
return true
end
return t == nil or next(t) == nil
end
function table.notEmpty(t)
return not table.isEmpty(t)
end
-- 将table的所有值转换为string
-- 可用于将科学计数形式转换为字符串发送给客户端
function table.valueConvertToString(t)
local newTable = {}
for k, v in pairs(t) do
if type(v) == "table" then
newTable[tostring(k)] = table.valueConvertToString(v)
else
newTable[tostring(k)] = tostring(v)
end
end
return newTable
end
function table.keys(t)
---@class keys
local keys = {}
for k, v in pairs(t) do
table.insert(keys, k)
end
return keys
end
-- 将t2合并到t1
function table.merge(t1, t2)
for k, v in pairs(t2) do
t1[k] = v
end
end
function table.concatTable(t, t2)
for k, v in pairs(t2) do
table.insert(t, v)
end
return t
end
local function tableToString(t, processed)
if type(t) ~= "table" or processed and table.contains(processed, t) then
return tostring(t)
end
if processed then
table.insert(processed, t)
end
local str
if table.isArray(t) then
for _, v in ipairs(t) do
local item = processed and table.toString(v, processed) or tostring(v)
str = str and (str .. ", " .. item) or item
end
else
for k, v in pairs(t) do
local item = (processed and table.toString(k, processed) or tostring(k)) .. ":" ..
(processed and table.toString(v, processed) or tostring(v))
str = str and (str .. ", " .. item) or item
end
end
return str and "{" .. str .. "}" or "{}"
end
local function tableToStringJsonFormat(t, processed, indent)
if indent == nil then
indent = ''
end
if type(t) ~= "table" or processed and table.contains(processed, t) then
return tostring(t)
end
if processed then
table.insert(processed, t)
end
local space = ' '
local str
if table.isArray(t) then
for i = 1, table.count(t) do
local v = t[i]
local item = processed and tableToStringJsonFormat(v, processed, indent .. space) or tostring(v)
item = string.format('[%s]:%s', i, item)
str = str and string.format("%s\n%s%s%s", str, indent, space, item) or
string.format("%s%s%s", indent, space, item)
-- item = '['..tostring(i)..']:'..item
-- str = str and (str .. "\n" ..indent.. space .. item) or (indent.. space ..item)
end
else
for k, v in pairs(t) do
local kName = tostring(k)
if string.isNullOrEmpty(kName) then
local item = (processed and tableToStringJsonFormat(v, processed, indent .. space) or tostring(v))
-- str = str and (str .. "\n" ..indent.. space .. item) or (indent..space..item)
str = str and string.format("%s\n%s%s%s", str, indent, space, item) or
string.format("%s%s%s", indent, space, item)
else
local item = (processed and tableToStringJsonFormat(k, processed, indent .. space) or tostring(k)) ..
":" ..
(processed and tableToStringJsonFormat(v, processed, indent .. space) or tostring(v))
-- str = str and (str .. "\n" ..indent.. space .. item) or (indent..space..item)
str = str and string.format("%s\n%s%s%s", str, indent, space, item) or
string.format("%s%s%s", indent, space, item)
end
end
end
return str and string.format("\n%s{\n%s\n%s}", indent, str, indent) or string.format("{\n%s}", indent)
-- return str and "\n"..indent.."{\n"..str .. "\n"..indent.."}" or "{\n"..indent.."}"
end
function table.toString(t, recursive)
return tableToString(t, recursive and {})
end
function table.toStringJsonFormat(t, recursive, indent, tablename)
if type(t) ~= 'table' then
return tostring(t)
end
table.sort(t, function(a, b)
return string.byte(tostring(a)) < string.byte(tostring(b))
end)
if tablename then
return string.format(' %s %s:%s', t, tablename, tableToStringJsonFormat(t, recursive and {}, indent))
else
return string.format(' %s %s', t, tableToStringJsonFormat(t, recursive and {}, indent))
end
end
function table.values(t)
---@class values
local values = {}
for k, v in pairs(t) do
table.insert(values, v)
end
return values
end
---@return void @根据value值删除只能是table(List)对象会重排k值
function table.removeByValue(t, value)
for i = #t, 1, -1 do
if t[i] == value then
table.remove(t, i)
return true
end
end
return false
end
---@return void @根据value值删除如果是table(List)对象不会重排k值
function table.removeByKeyValue(t, value)
for k, v in pairs(t) do
if v == value then
t[k] = nil
end
end
end
---@generic K,V
---@param list table<K, V> | V[]
---@param comp fun(a:K, b:K):boolean
---@return number @使用 table里面不要有keys和count这样的字段for i = 1, #t.keys do
-- t[t.keys[i]]
-- end
function table.sortByKeys(t, comp)
if not t.keys then
t.keys = {}
end
t.count = 0
local count = table.count(t) - 2 -- 要减掉keys和count这两个变量
t.count = count
for i = 1, #t.keys do
t.keys[i] = nil
end
local keyIndex = 1
for k, v in pairs(t) do
if k ~= 'keys' and k ~= 'count' then
t.keys[keyIndex] = k
keyIndex = keyIndex + 1
end
end
return table.sort(t.keys, comp)
end
---@param func function(s:table,k:any,v:any)
function table.find(t, func, selfTable, compareData)
for k, v in pairs(t) do
if func(selfTable, compareData, k, v) then
return k, v
end
end
return nil
end
---@generic V
---@param list table<number, V> | V[]
---@param func fun(a:V):boolean
---@return number,V
function table.findByCondi(list, func)
for k, v in pairs(list) do
if func(v) then
return k, v
end
end
return nil
end
---@generic V
---@param list table<V, any>
---@param func fun(a:V):boolean
---@return V,any
function table.findByCondiKey(list, func)
for k, v in pairs(list) do
if func(k) then
return k, v
end
end
return nil
end
-- 返回不重复的value
function table.diffValue(t)
local temp = {}
local hashTable = {}
for _, value in pairs(t) do
if hashTable[value] == nil then
hashTable[value] = true
table.insert(temp, value)
end
end
return temp
end
function table.clear(t)
for k, v in pairs(t) do
t[k] = nil
end
end
function table.clearWithoutFunc(t)
for k, v in pairs(t) do
if t[k] and type(t[k]) ~= 'function' then
t[k] = nil
end
end
end
---@return void @键值对顺序遍历table。调用前需要调用forOrderCollectKeys
---@param ascending boolean @keys值升序或者降序排序默认升序
function table.forOrder(t, func, ascending)
if t.keys then
table.clear(t.keys)
else
t.keys = {}
for k, v in pairs(t) do
t[k] = nil
end
end
for k, v in pairs(t) do
if v ~= t.keys then
table.insert(t.keys, k)
end
end
if ascending == nil then
ascending = true
end
table.sort(t.keys, function(a, b)
if ascending then
return a < b
else
return b < a
end
end)
for k, v in pairs(t.keys) do
if func then
func(t[v])
end
end
end
-----@param recalculateKeys boolean @table发生变化如果需要顺序遍历table,传入true
-- function table.forOrderCollectKeys(t,recalculateKeys)
-- if not t.keys or recalculateKeys then
-- t.keys = table.keys(t)
-- end
-- end
function table.insertArray(t, t2)
for k, v in pairs(t2) do
table.insert(t, v)
end
end
function table.maxValue(t)
local maxValue = math.mininteger
local key
for k, v in pairs(t) do
if type(v) == "number" and v > maxValue then
maxValue = v
key = k
end
end
return maxValue, key
end
-- 去重
function table.unique(t, bArray, mainKey)
local check = {}
local n = {}
local idx = 1
for k, v in pairs(t) do
local judgeKey = v
if mainKey then
judgeKey = v[mainKey] or v
end
if not check[judgeKey] then
if bArray then
n[idx] = v
idx = idx + 1
else
n[k] = v
end
check[judgeKey] = true
end
end
return n
end
function table.insertOpti(t, t2)
t[#t + 1] = v
end
function table.AddRanage(t, t2)
for k, v in pairs(t2) do
t[#t + 1] = v
end
return t
end
--- 获取前N个表中元素
---@param N number 前多少个
---@param t table
function table.getTopN(N, t)
N = N or #t -- 如果没有指定N则获取所有数据
local topN = {}
for i = 1, math.min(N, #t) do
table.insert(topN, t[i])
end
return topN
end
--- 合并两个table
function table.mergeTable(table1, table2)
for key, value in pairs(table2) do
local itemId = tonumber(key)
local itemNum = tonumber(value)
local oldNum = table1[itemId] or 0
table1[itemId] = oldNum + itemNum
end
end