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

时间:2016-03-29 17:26:33

标签: arrays 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个元素。能够看到完整的阵列将有助于我继续将代码设计为故障排除技术。

谢谢,

2 个答案:

答案 0 :(得分:0)

您可以做的简短示例:

-- some example table
t = {1,2,4,5,1,2,7,8,5,4,9,3}

-- for every value v in t
for k,v in pairs(t) do

  -- check v vs all remaining values in t
  for m,w in pairs(t) do
    -- but not vs v itself
    if k ~= m then
      -- remove any non unique values from t
      if w == v then
        t[m] = nil
        t[k] = nil
      end
    end
  end
end

-- print the result
for k,v in pairs(t) do
  print(v)
end

答案 1 :(得分:0)

感谢所有帮助。这是最终工作的代码。我确定它没有效率,但我现在得到了正确的输出。

function readformatEvent()

function readformatEvent()

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

--create array from captured read data

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

--turn 2nd duplicate in the array into a nil value

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

--remove the nils from the array

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

--output unique values in correct format

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