lua数组包含特定值以供进一步检查
2016-11-9 2:19:7
收藏:0
阅读:123
评论:1
抱歉如果我现在打扰了你,我还在学习。但是我需要帮助。你能修正我并制作一个脚本来检查并获取数组2D的值以供进一步检查和计分吗?
我构建的示例数组2D语法如下:
role = {{[name],[points],[indexpoint]},{[...],[...],[...]}}
我制作的数组2D示例值如下:
role = {{"mike", 30, "1"},{"michael", 40, "2"},{"mike", 40, "2"},{"michael", 50, "3"},{"frost", 50, "3"},{"nick", 60, "4"}}
我想要的是。当我搜索名称为“michael”时,它会在数组中检测到值。类似这样的东西
local player_data = {{"michael", 40, "2"},{"michael", 50, "3"}}
因此,在此之后,我可以计算他已经拥有的积分。40+50
并且结果“90”将发送到新变量,例如 resultpoint = 90
因此,打印将显示如下内容
Player "Michael"
Your points is "90"
Here is the list of your index that you earned :
1. earn 40 points in index point "2"
2. earn 50 points in index point "3"
我在此处写了很长的代码:
role = {{"mike", "30", "1"},{"michael", "40", "2"},{"mike", "40", "2"},{"michael", "50", "3"},{"frost", "50", "3"},{"nick", "60", "4"}}
function check_role1(tab, val)
for index, value in ipairs (tab) do
-- 我们抓取我们的子表格的第一个索引(而不是玩家名称)
if value[1] == val then
return true
end
end
return false
end
function check_role2(tab, val)
for index, value in ipairs (tab) do
-- 我们抓取我们的子表格的第三个索引(而不是索引点)
if value[3] == val then
return true
end
end
return false
end
function detectroles(name)
pn = name
if check_role1 (role, pn) then
print ('Yep')
--[[for i = 1, #role do
player_checkname[i] = role[i][1] -- 从数组中获取玩家名称以供进一步检查
player_checkpnt[i] = role[i][2] -- 从数组中获取玩家点以供进一步检查
player_checkidpnt[i] = role[i][3] -- 从数组中获取玩家点以供进一步检查]]
-- 这是获取值的正确代码吗?
end
else
print ('You dont earn any points')
end
end
detectroles("jack") -- 这是调用函数,以检查名为jack的名称是否在数组中或不在
这真的可能吗?如果有更简单或更少的代码方式,请让我知道。我知道,这是太多代码了。我还是一个新手
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的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 代码?

你似乎正在寻找一些通用的数据结构函数,称为
filter(有时称为select)和reduce。filter是一个简单的函数,它在一组值上操作,创建一个只包含符合所提供谓词的新集合。filter的实现非常直观:操作的结果是新的集合。
在Lua中:
local function filter (list, test) local result = {} for index, value in ipairs(list) do if test(value, index) then result[#result + 1] = value end end return result end我们可以使用此函数来获取过滤后的值集,其中每个表中的第一个条目是
'michael':local set = { { "mike", "30", "1" }, { "michael", "40", "2" }, { "mike", "40", "2" }, { "michael", "50", "3" }, { "frost", "50", "3" }, { "nick", "60", "4" } } local filtered_set = filter(set, function (person) return person[1] == 'michael' end) for _, person in ipairs(filtered_set) do print(unpack(person)) end --[[stdout: michael 40 2 michael 50 3 ]]reduce是一个函数,通过迭代一组值来累积单个值。reduce通常允许提供初始值,否则初始值为集合中的第一个值。在Lua中:
local function reduce (set, action, initial_value) local result local index if initial_value ~= nil then result = initial_value index = 1 else result = set[1] index = 2 end for i = index, #set do result = action(result, set[i], i) end return result end我们可以使用它来确定集合条目的合并值:
local value = reduce(filtered_set, function (score, next_entry) return score + next_entry[2] -- 注意不要依赖字符串形式的数学运算 end, 0) print(value) --> 输出 90虽然这些函数不在 Lua 标准库中,但它们是非常常见的 functional set 操作,并了解如何实现它们(以及其他类似的函数,如
each,map,reject,count,index,has,find)将教您很多关于处理数据结构的知识。尝试考虑它们如何适合您当前的代码。