按时间排序lua中的数组/表

时间:2014-04-14 19:38:45

标签: sorting lua lua-table

我在排序表上已经研究了很长一段时间,我看到很多例子,但我似乎无法让它们发挥作用。

我试图从一个方法中获取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

然后我如何试图展示桌子(被困在这里)

local function sortMyTable()
  table.sort(sellTest, function(a, b) return secsSinceEvent[2]  > secsSinceEvent[2] end)

  for k,v in ipairs(sellTest) do
    print(v[1].. ' == '.. v[2])
  end
end

我知道桌子是完全错误的,我还在学习LUA并研究桌面功能。

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

示例1:?

local sellTest = {}
    sellTest['eventType'] = {}
    sellTest['secsSinceEvent'] = {}

或 例2:

local sellHistory = {
  eventType = {},
  secsSinceEvent = {}
}

1 个答案:

答案 0 :(得分:1)

  

我的数组是什么样的

你的意思是我的数组 s 是什么样的,因为你发布了其中的8个。你只需要一个:

sellHistory = {}

此数组的每个元素都应包含一个事件信息记录,其中包含eventTypesecsSinceEvent等字段。

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)

然后(例如):

for i,event in ipairs(sellHistory) do
  print(event.eventType, event.secsSinceEvent, event.seller)
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不会简单地为您提供事件时间。也许他们想要分步时区问题。