Sorting 按时间对lua中的数组/表进行排序

Sorting 按时间对lua中的数组/表进行排序,sorting,lua,lua-table,Sorting,Lua,Lua Table,我已经研究了相当长一段时间的排序表,我看到了很多例子,但我似乎无法让它们工作 我试图从一个方法中获取playerValues并将它们存储到一个表中(我相信我已经做到了),然后我想按时间对这些值进行排序 示例代码: 我的数组是什么样子的 sellTest = {} sellTest.eventType = {} sellTest.secsSinceEvent = {} sellTest.buyer = {} sellTest.seller = {} sellTest.someParam = {}

我已经研究了相当长一段时间的排序表,我看到了很多例子,但我似乎无法让它们工作

我试图从一个方法中获取playerValues并将它们存储到一个表中(我相信我已经做到了),然后我想按时间对这些值进行排序

示例代码:

我的数组是什么样子的

sellTest = {}
sellTest.eventType = {}
sellTest.secsSinceEvent = {}
sellTest.buyer = {}
sellTest.seller = {}
sellTest.someParam = {}
sellTest.itemName = {}
sellTest.soldAmount = {}
我是如何存储这些值的

for j = 0, totalEvents do
  for i = 0, numEvents do
    sellTest.eventType[i], sellTest.secsSinceEvent[i], sellTest.seller[i],
    sellTest.buyer[i], sellTest.someParam[i], sellTest.itemName[i],
    sellTest.soldAmount[i] = GetPlayerInfo(event(j),SELL_SALES, i )
  end
 end
然后我如何尝试显示表格(卡在这里)

我知道table是完全错误的,我仍在学习LUA并研究table的功能

更新,我应该这样存储数据吗

例1:

local sellTest = {}
    sellTest['eventType'] = {}
    sellTest['secsSinceEvent'] = {}
或 例2:

local sellHistory = {
  eventType = {},
  secsSinceEvent = {}
}
我的数组是什么样子的

sellTest = {}
sellTest.eventType = {}
sellTest.secsSinceEvent = {}
sellTest.buyer = {}
sellTest.seller = {}
sellTest.someParam = {}
sellTest.itemName = {}
sellTest.soldAmount = {}
你是说我的数组是什么样子的,因为你发布了8个数组。您只需要一个:

sellHistory = {}
此数组的每个元素都应该包含一个事件信息记录,该记录包含
eventType
secsSinceEvent
等字段

for i = 0, numEvents do
    local e = {}
    e.eventType, e.secsSinceEvent, e.seller, e.buyer, e.someParam, e.itemName, e.soldAmount 
        = GetPlayerInfo(event(j), SELL_SALES, i )
    table.insert(sellHistory, e)
end
现在,按时间排序事件信息很容易:

table.sort(sellHistory, function(a,b) return a.secsSinceEvent > b.secsSinceEvent end)
然后(例如):


您所做的是获取事件信息,将每个值写入单独的数组中,这些数组通过索引进行关联。正如您所发现的,这使得排序等工作变得非常困难


顺便说一句,我不知道您编写的API是什么,但仅从名称判断--
secsSinceEvent
--您的逻辑可能已被破坏

如果事件发生在1:00:00,并且您在1:00:01调用
GetPlayerInfo
,则
secsSinceEvent
将为1

如果事件发生在2:00:00,并且您在2:00:50调用
GetPlayerInfo
,则
secsSinceEvent
将为50

如果按
secsSinceEvent
排序,则第二个事件将显示为早于第一个事件,这是不正确的


如果您的目的只是维护可按事件时间排序的历史记录,则需要使用
secsSinceEvent
通过从当前时间减去
secsSinceEvent
来计算事件的时间,并将其保存为事件的时间戳。我不知道为什么API一开始不简单地给出事件时间。也许他们想避开跨步时区问题。

排序函数应该是
a.secsSinceEvent[2]>b.secsSinceEvent[2]
之类的吗?因为它是常量,并且不使用任何参数。另外,为什么要将单个事件的数据拆分为多个并行数组?为什么不让一个事件数组和一个包含所有相关数据的表呢?嗯,我一直在尝试不同的事情?你说的单个事件数组是什么意思?在上面的评论中添加了我认为您的意思假设我正确理解了您的代码销售活动的各种信息分布在sellTest.*表中。第n个事件的数据位于每个表的第n个索引字段中。与之相反,它有一个单独的sellHistory表,其中包含作为其编号索引的
{eventType=…,secsSinceEvent=…,buyer=…,seller=…,itemName=…,soldAmount=…}
等格式的表。太棒了!这是工作!:)我花了这么多时间在这上面。我把名单按降序排列,看看能不能按升序排列。。编辑:是的,谢谢你这么多泥!
for i,event in ipairs(sellHistory) do
  print(event.eventType, event.secsSinceEvent, event.seller)
end