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