Lua:读取数据的最快方法

时间:2013-02-26 01:43:34

标签: io lua integer

这是我的计划。

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”)吗?

3 个答案:

答案 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之后停止脚本),然后分析整个脚本需要多长时间。后者会更长,但只会是一个相对较小的百分比,而不是大量的。

按照你正在做的方式一次加载整个文件几乎肯定会比零碎地加快。文件系统就像一次读取整个数据块,而不是一次读取整个数据块。除此之外,如何处理文本是相对无关紧要的。