Lua: Smartest way to add to table only if not already in table, or remove duplicates

前端 未结 3 994
清歌不尽
清歌不尽 2021-01-11 17:51

I have a table of strings. I\'d like an easy way to remove all of the duplicates of the table.

So if the table is {a, b, c, c, d, e, e} , after this ope

相关标签:
3条回答
  • 2021-01-11 18:47

    The simplest way is using the tables as keys, not as values, in your "container table".

    Let's call the container table values. You must currently be doing something similar to this for adding elements to it:

    table.insert(values, value)
    

    And you parse values like this:

    for i,v in ipairs(values) do
      -- v contains the internal values
    end
    

    In order to have the tables just once, you can insert them this other way:

    t[value] = 1
    

    This will ensure that the inserted values (strings, tables, numbers, whatever) are included just once, because they will be 'overwritten'.

    Then you can parse t like this:

    for k,_ in pairs(values) do
      -- k contains the internal tables
    end
    
    0 讨论(0)
  • 2021-01-11 18:51

    It sounds like you're trying to implement a Set, a collection of unique elements. This article might help you: http://www.lua.org/pil/13.1.html

    0 讨论(0)
  • 2021-01-11 18:52

    What I normally do for this is index the table on the string so for example

    tbl[mystring1] = 1
    tbl[mystring2] = 1
    

    etc.

    When you add a string you simply use the lines above and duplicates will be taken care of. You can then use a for ... pairs do loop to read the data.

    If you want to count the number of occurrences

    use something like

    if tbl[mystring1] == nil then
      tbl[mystring1] = 1
    else
      tbl[mystring1] = tbl[mystring1] + 1
    end
    

    As the end of the addition cycle if you need to turn the table around you can simply use something like

    newtbl = {}
    for s,c in pairs(tbl) do
      table.insert(newtbl,s)
    end
    
    0 讨论(0)
提交回复
热议问题