以时间为基准在Lua中对数组/表进行排序
2014-4-14 20:15:22
收藏:0
阅读:85
评论:1
我已经研究了很长一段时间如何对表格进行排序,我看到了许多例子,但似乎无法让它们运作。
我想从一个方法中获取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 = {}
}
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
将下面翻译成中文并且保留原本的 markdown 格式
你是指我的数组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不简单地在第一次给出事件时间。也许他们想规避时区问题。