【IT168 技术文档】迭代器的使用技巧
使用排序好的Key迭代
你曾有过这样的需求么
for k,v in pairs(t) do
按照排序的key来遍历表.
function sortedpairs(t,comparator) local sortedKeys = {}; table.foreach(t, function(k,v) table.insert(sortedKeys,k) end); table.sort(sortedKeys,comparator); local i = 0; local function _f(_s,_v) i = i + 1; local k = sortedKeys[i]; if (k) then return k,t[k]; end end return _f,nil,nil; end
加上这段代码, 你就可以这么做了.
for k,v in sortedpairs(t) do
这便达到了你的目的, 假定key是可以使用'<'比较排序的, 例如, key全部都是数字或者全部都是字符串.
你可以自定义比较器函数(comparator function)来排序(table.sort参见lua手册). 主要就是包括2个参数, 如果第一个参数在第二个参数前则返回true.
示例: 基于忽略大小写的字母字典排序迭代.
function f(a,b) return string.lower(a) < string.lower(b); end for k,v in sortedpairs(t, f) do
示例: 基于表的自定义字段cost值的降序排序迭代.
function f(a,b) return t[a].cost > t[b].cost; end for k,v in sortedpairs(t, f) do