Lua:读取数据最快的方式

以下是我的程序。

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

点赞
用户1847592
用户1847592
也许,以下代码执行会更快一些:

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

```

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

2013-02-26 02:03:55
用户734069
用户734069

假设你的文件大小为16MB,你的加载例程的性能将被文件IO所主导。相对于这一点,处理加载的数据需要多长时间通常是不相关的。

只需尝试一下;测量仅加载文件需要多长时间(在 io.read 后停止脚本),然后测量整个脚本需要多长时间。后者会更长,但只会增加一些相对较小的百分比,而不是巨大的量。

以您目前的方式一次加载整个文件几乎肯定比分批加载要快。文件系统喜欢一次读取整个块的数据,而不是一点一点读。除此之外,如何处理文本是相对不相关的。

2013-02-26 02:40:10
用户282536
用户282536

我不确定它是否更快,但 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-26 03:15:15