Lua -- 重写pairs方法(让字典访问有序)
来源:互联网 发布:淘宝的广告位有哪些 编辑:程序博客网 时间:2024/06/06 03:48
字典由于其独特的存储数据方式,我们访问一个字典可能会有不同的遍历顺序,当我们游戏中希望同一个字典,在不同手机上都有相同的访问顺序的时候,怎么办呢,我们可以重写字典的遍历方法pairs
local rawpairs = pairs--------------------------------------------- 可以按指定顺序遍历的map迭代器-- @param tbl 要迭代的表-- @param func 比较函数-- @example-- for k,v in pairs(tbl,defaultComp) do print(k,v) endfunction pairs(tbl, func) if func == nil then return rawpairs(tbl) end -- 为tbl创建一个对key排序的数组 -- 自己实现插入排序,table.sort遇到nil时会失效 local ary = {} local lastUsed = 0 for key --[[, val--]] in rawpairs(tbl) do if (lastUsed == 0) then ary[1] = key else local done = false for j=1,lastUsed do -- 进行插入排序 if (func(key, ary[j]) == true) then arrayInsert( ary, key, j ) done = true break end end if (done == false) then ary[lastUsed + 1] = key end end lastUsed = lastUsed + 1 end -- 定义并返回迭代器 local i = 0 local iter = function () i = i + 1 if ary[i] == nil then return nil else return ary[i], tbl[ary[i]] end end return iterend
下面来实例使用一下新pairs
for k,v in pairs(table_name, function(op1,op2) return op1 > op2 end) do -- body...end
写一个默认的比较函数供大家使用,如果不想写比较函数的话,可以使用下面的
---------------------------------- 通用比较器(Comparator)-- @return 对比结果function defaultComp( op1, op2 ) local type1, type2 = type(op1), type(op2) local num1, num2 = tonumber(op1), tonumber(op2) if ( num1 ~= nil) and (num2 ~= nil) then return num1 < num2 elseif type1 ~= type2 then return type1 < type2 elseif type1 == "string" then return op1 < op2 elseif type1 == "boolean" then return op1 -- 以上处理: number, string, boolean else -- 处理剩下的: function, table, thread, userdata return tostring(op1) < tostring(op2) -- tostring后比较字符串 endend
使用方法
for k,v in pairs(table_name, defaultComp) do -- body...end
当大家遇到lua给的方法不够使用的时候,大家可以自定义哦。
阅读全文
0 0
- Lua -- 重写pairs方法(让字典访问有序)
- 如何让字典保持有序
- 如何让字典保持有序
- 让 Lua 访问数据库
- 2-6 让字典保持有序
- python-4-如何让字典保持有序?
- Lua中的pairs们(pairs,ipairs,gmatch)
- Lua中的不同迭代器(pairs、ipairs)
- python 2-6 如何让字典保持有序collections.OrderedDict
- Python高级编程-如何让字典保持有序?
- -- Lua 实现类继承 方法重写
- Lua的表(字典)
- 集合(7-有序字典SortedDictionary)
- 【Lua】pairs 和 ipairs
- Lua:ipairs/pairs
- Python学习(三)——字典、有序字典、集合
- 在一个集合中存储了无序并且重复的字符串,定义一个方法,让其有序(字典顺序),而且还不能去除重复
- 在一个集合中存储了无序并且重复的字符串,定义一个方法,让其有序(字典顺序),而且还不能去除重复
- 树模型
- QT创建自己的动态库并使用
- /etc/ld.so.conf.d/目录下文件的作用
- 关于java数据结构hashSet与TreeSet重写方法的格式
- MySql避免重复插入记录方法(ignore,Replace,ON DUPLICATE KEY UPDATE)
- Lua -- 重写pairs方法(让字典访问有序)
- 不二极端编程之Java基础工程详解
- xgboost
- 二维码最简单的生成和识别
- 求一组数字组成的最大整数三种解法
- 解决wordpress安装主题或插件需要FTP问题
- 立体匹配---Census Transform
- 6.常用java操作
- pkg-config用法详解