2017-06-13 4 views
1

(glua)テーブルにvarがないかどうかをチェックするには?私の場合は

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 

ため と後藤をサポートしていませ続けるif v ~= pかをチェックあまりに

+0

最初のループから 'k'を使用していますか? – hjpotter92

答えて

0

をサポートしていませんを使用することはできませんif not self.targets[v]は、ents.findInSphere()が新しく構築された座標のセットを返すと失敗します。

==または~=の2つのオブジェクトを比較すると、その内容が比較されていないことがわかります。オブジェクトのインスタンスがまったく同じかどうかだけを確認します。これは、C/C++でのポインタの比較によく似ています。 .findInSphere()から受け取った座標オブジェクトにeqメタメソッドが実装されていない場合は、座標を自分で比較する必要があります。座標実装に応じて、それは次のようになります。2つの座標オブジェクトを比較するために必要な

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 -- .. 

正確なコードをその座標の実装に依存します。

「グルー」タグが付いています。それがgarryのmodなら、ents.FindInSphere()は座標ではなくエンティティを返します。 if not self.targets[v]をチェックするだけでうまくいくはずです。

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はdefaultlyに建てtable.HasValueThe Docsを参照しています。この場合、 という論理が必要です。

関連する問題