我在排序表上已经研究了很长一段时间,我看到很多例子,但我似乎无法让它们发挥作用。
我试图从一个方法中获取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 = {}
}
答案 0 :(得分:1)
我的数组是什么样的
你的意思是我的数组 s 是什么样的,因为你发布了其中的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)
然后(例如):
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不会简单地为您提供事件时间。也许他们想要分步时区问题。