这是我的计划。
local t = {}
local match = string.gmatch
local insert = table.insert
val = io.read("*a")
for num in match(val, "%d+") do
insert(t, num)
end
我想知道是否有更快的方法来加载一个大的(16MB +)整数数组。考虑到数据是由单个行的一行一行组成的,这可以更快吗?我应该看看io.read(“* n”)吗?
答案 0 :(得分:1)
我不确定它是否更快,但read("*n")
更简单......
local t = { }
while true do
local n = io.stdin:read("*n")
if n == nil then break end
table.insert ( t , n )
end
答案 1 :(得分:0)
可能会更快:
local t = {}
local match = string.match
for line in io.lines() do
t[#t+1] = match(line, '%d+')
end
不要忘记将字符串转换为数字。
答案 2 :(得分:0)
鉴于您的文件大小为16MB,您的加载例程的性能将由文件IO控制。处理加载数据所需的时间通常与此无关。
试试吧;分析加载文件所需的时间(在io.read
之后停止脚本),然后分析整个脚本需要多长时间。后者会更长,但只会是一个相对较小的百分比,而不是大量的。
按照你正在做的方式一次加载整个文件几乎肯定会比零碎地加快。文件系统就像一次读取整个数据块,而不是一次读取整个数据块。除此之外,如何处理文本是相对无关紧要的。