Lua 中的格式化字符串
2016-2-13 4:49:9
收藏:0
阅读:88
评论:4
我想编写一个脚本,可以接受任何数字,然后以特定的格式将它们递增并返回。 例如这样
for i = 1,9 do
print(i)
end
将返回
1
2
3
4
5
6
7
8
9
但我希望它像这样打印
1 2 3
4 5 6
7 8 9
并且我希望它甚至可以处理超过 9 的数字,所以像 20 这样的数字会像这样显示
1 2 3
4 5 6
7 8 9
10 11 12
13 14 15
16 17 18
19 20
我确定可以使用 Lua 中的字符串库完成,但我不确定如何使用该库。
请帮忙解答!
点赞
用户5352026
我能想到两种方法来实现这个:
local NUMBER = 20
local str = {}
for i=1,NUMBER-3,3 do
table.insert(str,i.." "..i+1 .." "..i+2)
end
local left = {}
for i=NUMBER-NUMBER%3+1,NUMBER do
table.insert(left,i)
end
str = table.concat(str,"\n").."\n"..table.concat(left," ")
另一种方法使用 gsub:
local NUMBER = 20
local str = {}
for i=1,NUMBER do
str[i] = i
end
-- 将 "1 2 3 4 ..." 连接起来
str = table.concat(str," ")
-- 每 3 个数字为一组分割
-- "%d+ %d+ %d+" 匹配空格隔开的 3 个数字
-- (你可以用 "\t" 替换连接中的空格)
-- (...) 捕获可以允许我们用 %1 获取到这些数字
-- "%s?" 最后是为了去除任何后面的空格
-- (否则每行末尾都会多一个“N N N ”而不是“N N N”)
-- (使用 "?" 表示最后的三元组可能没有空格)
-- ^ 比如 NUMBER = 6 会以 "4 5 6" 结尾
-- "%1\n" 只用于获取数字并添加一个换行符
str = str:gsub("(%d+ %d+ %d+)%s?","%1\n")
print(str)
我对这两段代码进行了基准测试。上面的代码比下面的代码稍微快一点,但差别几乎没有:
使用 10000 次迭代测试
数字 20 20 20 100 100
上方 256 ms 276 ms 260 ms 1129 ms 1114 ms
下方 284 ms 280 ms 282 ms 1266 ms 1228 ms
2016-02-13 12:01:14
用户3979429
使用临时表来保存值,直到打印它们为止:
local temp = {}
local cols = 3
for i = 1,9 do
if #temp == cols then
print(table.unpack(temp))
temp = {}
end
temp[#temp + 1] = i
end
-- 最后一分钟的检查,确保没有剩余
if #temp > 0 then
print(table.unpack(temp))
end
temp = nil
2016-02-13 12:52:28
用户3735873
## 将数字按每行指定个数进行打印
```lua
function f(n,per_line) --定义函数 f,n 表示数字的数量,per_line 表示每行的数量
per_line = per_line or 3 --如果没有指定每行数量,默认为 3
for i = 1,n do --循环打印数字
io.write(i,'\t') --输出数字
if i % per_line == 0 then io.write('\n') end --如果当前行已经达到指定数量了,则换行
end
end
f(9) --打印 9 个数字,每行默认为 3 个
f(20) --打印 20 个数字,每行默认为 3 个
2016-02-13 15:24:09
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的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中获取用户配置主目录的跨平台方法
for 循环可以填写第三个可选参数 _step_:
for i = 1, 9, 3 do print(string.format("%d %d %d", i, i + 1, i + 2)) end