lua 刷新/替换二维数组

我在我的二维数组中遇到了一些问题。我实际上想要计划一个刷新命令。

我的数据在 data.txt

test1:30:1
test2:40:2

所以每当我调用函数 ReadData 时。它会发送类似这样的内容到我的 Array2d 中:

line_data = {{"test1", "30", "1"},
             {"test2", "40", "2"}}

但问题是每当我调用这个函数时,它总是添加相同的数据,我想只是做一些刷新或替换,也许是在我做一些事件时。 我的代码

line_data = {}

function ReadData()
    local file = io.open("data.txt", "r")
    for line in file:lines() do
        line_data[#line_data+1] = { line:match('([^:]+):(%d+):(%d+)') }
    end
end

也许你们能帮我解决这种情况?

点赞
用户5675002
用户5675002

如果你想用新数据填充现有的行,则需要一些标识符。如果该标识符仅是名称,即字符串的第一部分,则更改将数据添加到数组的行:

-- 旧代码
-- line_data[#line_data+1] = { line:match('([^:]+):(%d+):(%d+)') }

-- 新代码
local name, score1, score2 = line:match('([^:]+):(%d+):(%d+)')
line_data[name] = {score1, score2}
2016-11-10 09:38:13
用户88888888
用户88888888

如果我理解正确,您将在重新读取文件后覆盖 line_data。因此,我认为最好的方法是从读取函数本身获取数组并替换旧的数据。这是个例子:

function ReadData(_path)
    local tmp = {}
    local file = io.open(_path, "r")
    for line in file:lines() do
        tmp[#tmp+1] = { line:match('([^:]+):(%d+):(%d+)') }
    end
    file:close()
    return tmp
end

function Array2dAsStr(_array)
    local function cutRight(_s, _i)
        _i = _i or 1
        return _s:sub(1, (_s:len())-1*_i)
    end
    local sOut = '{'
    for _, v in pairs(_array) do
        sOut = sOut..'{'
        for _, v1 in pairs(v) do
            sOut = sOut..v1..','
        end
        sOut = cutRight(sOut)..'},'
    end
    return cutRight(sOut)..'}'
end

line_data = ReadData("data.txt")
print(Array2dAsStr(line_data))

-- 如果您再次读取文件,`line_data` 的旧内容将被覆盖
line_data = ReadData("data.txt")
print(Array2dAsStr(line_data))
2016-11-10 09:39:28