Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Lua表中查找重复值_Lua_Duplicates - Fatal编程技术网

在Lua表中查找重复值

在Lua表中查找重复值,lua,duplicates,Lua,Duplicates,我有一个Lua表,它会自动生成X和Y值,我试图使它这样,如果一个X值与表中的另一个X值相同,那么它会做一些事情,现在的事情并不重要,我找到的唯一答案是,如果您已经知道表中的内容,例如“橙色”“蓝色”我对此不感兴趣 假设我在一个表中生成了大量的数字,那么我如何检查该表中的匹配值,这些匹配值可能会在运行时的稍后生成。 我的x,y值已经四舍五入到2位小数,即:1.10。 我的x和y值已经生成到一个表中 我的代码 一开始, positiontableX = {} positiontableY = {}

我有一个Lua表,它会自动生成X和Y值,我试图使它这样,如果一个X值与表中的另一个X值相同,那么它会做一些事情,现在的事情并不重要,我找到的唯一答案是,如果您已经知道表中的内容,例如“橙色”“蓝色”我对此不感兴趣

假设我在一个表中生成了大量的数字,那么我如何检查该表中的匹配值,这些匹配值可能会在运行时的稍后生成。 我的x,y值已经四舍五入到2位小数,即:1.10。 我的x和y值已经生成到一个表中

我的代码

一开始,

positiontableX = {}
positiontableY = {}
在运行时

newxpos = math.floor (a[1] * 100)/100
newypos = math.floor (a[2] * 100)/100
table.insert (positiontableX, 1, newxpos)
table.insert (positiontableY, 1, newypos)

关于在表中生成的数据,这是代码的另一部分,我不需要在这里添加。

这是一个有趣的解决方案,如果有点笨拙的话。我在这里假设您不想覆盖任何值:如果您得到一个重复的值,您希望将其添加到表中并继续前进。为了解决这个问题,我将使用来立即检查值是否存在(无循环),但使用两个单独的表以避免覆盖任何内容

local positiontableX = {} --an array where values are stored as values
local heldposX = {} --an array where values are stored as indexes
a = {1, 2, 3, 4, 3, 5, 7, 2, 7, 10}

for i = 1, 10 do
  local newxpos = math.floor (a[i] * 100)/100
  if heldposX[newxpos] == nil then  --if this value has never been added yet
    print("new x value " .. newxpos)
    heldposX[newxpos] = true        --add it
  else                              --if this value has been added before
    print("duplicate x value " .. newxpos)
  end
  table.insert (positiontableX, 1, newxpos) --add value to position table
end
输出

new x value 1.0
new x value 2.0
new x value 3.0
new x value 4.0
duplicate x value 3.0
new x value 5.0
new x value 7.0
duplicate x value 2.0
duplicate x value 7.0
new x value 10.0

总而言之,每个x和y pos列表使用两个表。您将向其中的每一个添加值,但使用一个值来确定值是否已经存在,以便您可以编写一个脚本来执行一些特殊的操作(注意,在我的示例中,我在执行脚本后将值添加到positiontableX,如果它已经存在,但您可以通过移动行来更改它).

这里有一个有趣的解决方案。我在这里假设您不想覆盖任何值:如果您得到一个重复的值,您希望将其添加到表中并继续前进。为了解决这个问题,我将使用来立即检查值是否存在(无循环),但使用两个单独的表以避免覆盖任何内容

local positiontableX = {} --an array where values are stored as values
local heldposX = {} --an array where values are stored as indexes
a = {1, 2, 3, 4, 3, 5, 7, 2, 7, 10}

for i = 1, 10 do
  local newxpos = math.floor (a[i] * 100)/100
  if heldposX[newxpos] == nil then  --if this value has never been added yet
    print("new x value " .. newxpos)
    heldposX[newxpos] = true        --add it
  else                              --if this value has been added before
    print("duplicate x value " .. newxpos)
  end
  table.insert (positiontableX, 1, newxpos) --add value to position table
end
输出

new x value 1.0
new x value 2.0
new x value 3.0
new x value 4.0
duplicate x value 3.0
new x value 5.0
new x value 7.0
duplicate x value 2.0
duplicate x value 7.0
new x value 10.0

总而言之,每个x和y pos列表使用两个表。您将向其中的每一个添加值,但使用一个值来确定值是否已经存在,以便您可以编写一个脚本来执行一些特殊的操作(注意,在我的示例中,我在执行脚本后将值添加到positiontableX,如果它已经存在,但您可以通过移动行来更改它).

我似乎得到了“新的x值-1.98重复x值-1.98重复x值-1.98重复x值-1.98重复x值-1.98重复x值-1.98重复x值-1.98重复x值-1.98重复x值-1.98”或者A)你的算法一直在创建重复的x值,或者B)你在某种程度上循环并不断重复A单一值。你能把
a
表的一部分或一段完整的代码放在你计算和插入值的地方吗?我似乎得到了“新的x值-1.98重复的x值-1.98重复的x值-1.98重复的x值-1.98重复的x值-1.98重复的x值-1.98重复的x值-1.98重复的x值-1.98重复的x值-1.98重复的x值值-1.98'要么A)您的算法不断创建重复项,要么B)您以某种方式循环并不断重复单个值。您是否可以将
a
表的一部分或一段完整的代码放在计算和插入值的地方?