技术开发 频道

Lua中迭代器的使用技巧

  【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
0
相关文章