私は、ユーザーが入力するランダムなコンテンツでいっぱいのテーブルを持っています。ユーザーがこの表をすばやく検索できるようにして、検索を容易にする方法の1つは、表をアルファベット順に並べ替えることです。もともと、表には、このような何かを見て:ルア - アルファベット順のテーブルの並べ替え
myTable = {
Zebra = "black and white",
Apple = "I love them!",
Coin = "25cents"
}
私はアルファベット順ではなく、店それらに出力するようにそのようにテーブルの内容を私を許可pairsByKeys()関数を実装することができました。検索が設定される方法のため、テーブル自体はアルファベット順である必要があります。非数値添字のテーブルはアルファベット順にソートすることができないこと - 私は(あなたが私に教えて、おそらく間違って)理解するために来た時間が経過した後
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
。その後、私はそれを回避する方法を考え始めたので - 私が考える一つの方法は、テーブルをソートして、数値添字の配列にそれぞれの値を入れている、以下のようなもの:原則として
myTable = {
[1] = { Apple = "I love them!" },
[2] = { Coin = "25cents" },
[3] = { Zebra = "black and white" },
}
を、私はこれは動作するはずと感じ、何らかの理由で私はそれに問題があります。私のテーブルはソートされていないようです。上記の関数を使用してテーブルをソートする関数は次のとおりです。
SortFunc = function()
local newtbl = {}
local t = {}
for title,value in pairsByKeys(myTable) do
newtbl[title] = value
tinsert(t,newtbl[title])
end
myTable = t
end
myTableはまだソートされません。どうして?
...私はそれがない何を考えないこのソリューションは、私のために動作することを前提としています。