【问题标题】:Sort nested table with lua使用 lua 对嵌套表进行排序
【发布时间】:2013-03-11 17:14:01
【问题描述】:

我有下表:

{
  STANDBY = {
    timeout = "10",
    mode = "0"
  },
  RTP = {
    minport = "10000",
    maxport = "10010"
  }
}

我想按字母顺序排序,所以结果表应该是这样的:

{
  RTP = {
    maxport = "10010",
    minport = "10000"
  },
  STANDBY = {
    mode = "0",
    timeout = "10"
  },
}

你能帮帮我吗?

【问题讨论】:

  • 这些是同一张桌子。你的问题没有意义。非整数键在 Lua 中没有顺序。

标签: sorting lua lua-table


【解决方案1】:

引用Programming in Lua : 19.3的以下内容。

一个常见的错误是尝试对表的索引进行排序。在表中,索引形成一个集合,并且没有任何顺序。如果要对它们进行排序,则必须将它们复制到数组中,然后对数组进行排序。

如果您使用pairs() 遍历表,则名称以任意顺序出现。但是,您不能直接对它们进行排序,因为这些名称是表的键。

解决方法也在同一页面上提到。

local tableVarName = {
    STANDBY = {
        timeout = "10",
        mode = "0"
    },
    RTP = {
        minport = "10000",
        maxport = "10010"
    }
}
function pairsByKeys (t, f)
  local a = {}
  for n in pairs(t) do table.insert(a, n) end
  table.sort(a, f)
  local i = 0      -- iterator variable
  local iter = function ()   -- iterator function
    i = i + 1
    if a[i] == nil then return nil
    else return a[i], t[a[i]]
    end
  end
  return iter
end
for name, line in pairsByKeys(tableVarName) do
  print(name, line)
end

【讨论】:

  • 打印:RTP table: 0041A268 STANDBY table: 0041A208,这显然不是 OP 想要的。
  • @EgorSkriptunoff 递归使用相同的函数并不难。可以随时使用type( a ) == "table" 条件进行检查。
猜你喜欢
  • 2014-03-20
  • 2013-02-06
  • 2021-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多