在我的情况下,
self.targets = {}
for k,v in pairs(ents.findInSphere(self:GetPos()) do
-- here, how to check if not v in self.targets?
table.insert(self.targets,v)
我试过这个
for o, p in pairs(self.targets) do
if v ~= p then
另一个
if not self.targets[v]
有人可以帮助我吗?
我希望检查self.targets中是否不是v
但我不能用这个
for o, p in pairs(self.targets) do
if v == p then continue end
因为继续不支持 而且也不支持
答案 0 :(得分:0)
如果if v ~= p
返回新构建的坐标集,则检查if not self.targets[v]
或ents.findInSphere()
将失败。
您会看到,当您将两个对象与==
或~=
进行比较时,您没有比较其内容,只会检查这是否与对象的实例完全相同。这更像是比较C / C ++中的指针。
如果您从.findInSphere()
收到的坐标对象未实现eq
元方法,则您必须自己比较坐标。根据坐标实现,它可能类似于:
if v[1] == p[1] and v[2] == p[2] then -- ...
-- or
if v.x == p.x and v.y == p.y then -- ...
-- or
if v.equals(p) then -- ..
比较两个坐标对象所需的确切代码取决于该坐标的实现。
注意到'glua'标签。如果那是garry的mod,那么ents.FindInSphere()
会返回实体,而不是坐标。检查if not self.targets[v]
应该可以正常工作。
答案 1 :(得分:0)
从我所看到的,您尝试将所有新发现的目标追加到self.targets
。
因此,我们可以使用像...这样的结构来实现这一点。
self.targets = {}
for k,v in pairs(ents.findInSphere(self:GetPos())) do
if not table.HasValue(self.targets, v) then
self.targets[#self.targets+1] = v
end
end
Glua默认内置table.HasValue
,请参阅The Docs。
在这种情况下,我们只是想要逻辑而不是这个。