1

这是我的程序。

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

4

3 回答 3

1

鉴于您的文件大小为 16MB,您的加载例程的性能将由文件 IO 主导。处理加载的数据需要多长时间通常与此无关。

就试一试吧; 分析加载文件需要多长时间(之后停止脚本io.read),然后分析整个脚本需要多长时间。后者会更长,但只会占相对较小的百分比,而不是大量。

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

于 2013-02-26T02:40:10.377 回答
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
于 2013-02-26T03:15:15.623 回答
0

可能,这会更快:

local t = {}
local match = string.match
for line in io.lines() do
   t[#t+1] = match(line, '%d+')
end

不要忘记将字符串转换为数字。

于 2013-02-26T02:03:55.063 回答