【发布时间】:2009-07-18 04:07:50
【问题描述】:
我有一个表格,里面填满了用户输入的随机内容。我希望我的用户能够快速搜索此表,促进搜索的一种方法是按字母顺序对表进行排序。最初,表格看起来像这样:
myTable = {
Zebra = "black and white",
Apple = "I love them!",
Coin = "25cents"
}
我能够实现pairByKeys() 函数,它允许我按字母顺序输出表格内容,但不能以这种方式存储它们。由于搜索的设置方式,表格本身需要按字母顺序排列。
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 仍然没有最终被排序。为什么?
【问题讨论】: