如何在Lua中返回数组的所有值?

如果这是一个愚蠢的问题,那我很抱歉,我是一个经验不太丰富的程序员。

我正在尝试使用Lua返回数组中的所有值。我可以通过调用它们的索引(例如read_data[2])返回单个元素,但由于数组中的元素数量是变量,我无法简单地键入此内容。我的代码:

function readformatEvent()

local read_data = {}
local duplicate
local unique_data = {}

for i=1,16 do
    read_data[i] = readResult(i):readData()
end

for i=1,16 do
    duplicate = 0

    for j=(i+1),15 do
        if read_data[i] == read_data[j] then
            duplicate = 1
        end
    end

    if duplicate == 0 then
        unique_data[i] = read_data[i]
    end
end

return unique_data

end

unique_data是一个由read_data中独特值组成的数组。read_data可以由1到16个元素组成。能够看到完整的数组将帮助我继续完善代码和故障排除技巧。

谢谢您。

点赞
用户2858170
用户2858170

以下是一个简单的例子:

-- 一个示例表格
t = {1,2,4,5,1,2,7,8,5,4,9,3}

-- 对于表格中的每个值 v
for k,v in pairs(t) do

  -- 与所有剩余的值 w 进行比较
  for m,w in pairs(t) do
    -- 但不要与自己进行比较
    if k ~= m then
      -- 删除表格中的非唯一值
      if w == v then
        t[m] = nil
        t[k] = nil
      end
    end
  end
end

-- 打印结果
for k,v in pairs(t) do
  print(v)
end
2016-03-30 07:44:36
用户6130593
用户6130593

感谢所有的帮助。以下是最终可行的代码。我知道它并不高效,但现在我能得到正确的输出。

function readformatEvent()

function readformatEvent()

local read_data = {}
local unique_data = {}
local count = 1
local output = ""
local codes = readResult():readCount()

--从捕获的读取数据中创建数组

for i=1,16 do
    read_data[i] = readResult(i):readData()
end

--将数组中的第二个重复值转换为 nil 值

for k,v in pairs(read_data) do

    for m,w in pairs(read_data) do

        if k ~= m then

            if w == v then
                read_data[m] = nil
            end
        end
    end
end

--从数组中删除 nil 值

for i=1,16 do
    if read_data[i] ~= nil then
        unique_data[count] = read_data[i]
        count = count+1
    end
end

--以正确的格式输出唯一的值

if count == 12 and codes == 16 then
    count = count - 1
else
    count = count - 2
end

for i=1,count-1 do
    output = output..unique_data[i]..", "
end

return output..unique_data[count]

end
2016-03-31 15:02:30