2017-09-28 4 views
0

Ich möchte eine Liste von Elementen haben, nämlich Koordinaten eines Punktes (x, y, z). Jetzt, wenn ich den Wert von x gleich halte, möchte ich die Werte von y und z erhöhen und etwas innerhalb der for-Schleifen tun.Prüfe, ob ein Element in der Liste existiert, wenn es nicht an die Liste angehängt wird.

set x [string range $x1 1 $lgthx]; 
set lst_nodes [list $x 0 0]; 
for { set y 0} {$y < 1000} {incr y} { 
    for { set z 0} {$z < 1000} {incr z} { 
     # Here i want to check if the item is present in the list or not 
     set lst_nodes [lappend $lst_nodes [<Do something here> $x $y $z]]; 
    } 
} 

Ich habe versucht, viele Möglichkeiten, diese Arbeit zu machen. Aber ich bin immer Fehler wie für den Wert von x: ungültig Befehlsnamen „215,5623“

Antwort

2

lappend Arbeiten auf Variablennamen, nicht die Variable selbst, so [lappend lst_nodes [<Do something here> $x $y $z]];.

Außerdem ändert lappend die Liste. Ich bin mir nicht sicher, warum Sie set verwenden.

Unter der Annahme, dass mit der oben ändert das Skript funktioniert, dann den Scheck zu tun, ich so etwas wie diese verwenden würde (ni bedeutet ‚nicht in‘ und gibt true zurück, wenn ein Element in einer Liste nicht vorhanden ist):

set x [string range $x1 1 $lgthx] 
set lst_nodes [list [list $x 0 0]] 
for {set y 0} {$y < 1000} {incr y} { 
    for {set z 0} {$z < 1000} {incr z} { 
     # Here i want to check if the item is present in the list or not 
     set new_node [<Do something here> $x $y $z] 
     if {$new_node ni $lst_nodes} { 
      lappend lst_nodes $new_node 
     } 
    } 
} 

Ich wickelte [list $x 0 0] in eine andere Liste, weil ich glaube, dass Sie eine Liste von Listen halten (dies sind die Koordinaten). Wenn dies nicht der Fall ist, müssen Sie jedes Element an die Liste anhängen, anstatt eine Liste (den neuen Knoten) anzuhängen, indem Sie list expansionlappend lst_nodes {*}$new_node verwenden.

+0

Ich folgte dem gleichen Code von Ihnen geschrieben, es wirft immer noch den gleichen Fehler. Betrachte x hat 123.566 Wert. – Damien

+0

@Damen Dann ist es der Befehl, den Sie verwenden. ''. Ohne zu wissen, wie es funktioniert, kann ich nicht helfen :(Wenn ich 'list' anstelle von' 'verwende, habe ich keine Probleme. – Jerry

+0

Okay, lass uns entfernen und lass es nur diese 3 sein Werte wie 'setze new_node [$ x $ y $ z]'. Ich habe es auch versucht und ich bekomme den gleichen Fehler – Damien

Verwandte Themen