【问题标题】:Lua : remove duplicate elementsLua:删除重复元素
【发布时间】:2013-12-02 17:27:46
【问题描述】:

我在 lua 中有一张桌子

测试 = {1,2,4,2,3,4,2,3,4,"A", "B", "A"}

我想删除表格中的所有重复元素。
输出应该是

测试 = {1,2,4,3,"A","B"}

编辑:

我的尝试:

> 项目 = {1,2,4,2,3,4,2,3,4,"A", "B", "A"} > 标志 = {} > 对于 i=1,table.getn(items) 做 如果不是 flags[items[i]] 那么 io.write(' ' .. items[i]) 标志[项目[i]] = true 结尾 >> 结束 1 2 4 3 A B>

现在工作正常。 感谢您的回答和cmets。

【问题讨论】:

    标签: lua lua-table


    【解决方案1】:

    类似于@Dimitry 给出的示例,但只有一个循环

    local test = {1,2,4,2,3,4,2,3,4,"A", "B", "A"}
    local hash = {}
    local res = {}
    
    for _,v in ipairs(test) do
       if (not hash[v]) then
           res[#res+1] = v -- you could print here instead of saving to result table if you wanted
           hash[v] = true
       end
    
    end
    

    【讨论】:

    • 不错的缩短。不过,条件的括号并不是必需的:D
    • @dmitry 谢谢 - 括号是我正常的 C、Perl 和 PHP 通过显示:-P
    【解决方案2】:
    local test = {1,2,4,2,3,4,2,3,4,"A", "B", "A"}
    
    -- make unique keys
    local hash = {}
    for _,v in ipairs(test) do
        hash[v] = true
    end
    
    -- transform keys back into values
    local res = {}
    for k,_ in pairs(hash) do
        res[#res+1] = k
    end
    
    -- 1 2 3 4 A B
    for _,v in ipairs(res) do
        print(v)
    end
    
    test = res
    

    ...一个简单直接的解决方案,但我认为,提示在 PiL 书中给出

    你有什么办法解决这个问题?

    【讨论】:

    • 请看我编辑了我的问题。感谢您的回答 。你能解释一下你为什么_??
    • 我已经编辑了标题,使其可以作为纯文本阅读。下划线不传达额外信息。您的解决方案原则上与我现在的解决方案相同,只是您没有写回test 表句柄。如果您同意,请考虑接受答案,它可以解决您的问题
    • 我肯定会接受我只是在做同样的研究来用更少的代码解决这个问题
    • res[#res+1] = k # 在这里做什么?请解释一下?
    • 它在 Lua 5.1 上找到表中的最后一个索引
    【解决方案3】:
    local xx = {'a','b','c','d','a','d','f','g','a'}
    table.sort(xx)
    local result = {}
    
    for key,value in ipairs(xx) do
      if value ~=xx[key+1] then
        table.insert(result,value)
      end
    end
    
    for key,value in ipairs(result) do
      print(key,value)   
    end
    

    【讨论】:

    • 通常,即使这段代码回答了问题,也建议简要说明它的作用以及为什么它是正确答案。
    【解决方案4】:
    > 项目 = {1,2,4,2,3,4,2,3,4,"A", "B", "A"} > 标志 = {} > 对于 i=1,table.getn(items) 做 如果不是 flags[items[i]] 那么 io.write(' ' .. items[i]) 标志[项目[i]] = true 结尾 >> 结束 1 2 4 3 A B>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-05
      • 2011-02-18
      • 1970-01-01
      • 2011-03-22
      • 2018-06-14
      • 2020-06-07
      • 2013-05-19
      相关资源
      最近更新 更多