2

私は次の表を持っています:

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

アルファベット順に並べ替えたいので、結果のテーブルは次のようになります。

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

手伝ってくれませんか?

4

1 に答える 1

6

以下は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
于 2013-03-11T09:14:01.540 に答える