9
votes

Comment vérifier si l'élément de liste existe dans TCL?

Dis que j'ai une liste TCL et j'ai apporté quelques éléments à ma liste. Maintenant, je veux vérifier si j'ai annoncé 6 ou 7 éléments.

Pour vérifier si l'élément de liste existe à l'endroit spécifié par un index que j'ai utilisé: xxx

Mais des coutures cela ne fonctionne pas. Comment je devrais faire ça? correctement? Il est correct de vérifier si {[Lindex $ myList 6]]] EQ ""}


0 commentaires

3 Réponses :


18
votes

Pourquoi n'utilisez-vous pas llthongueur pour vérifier la longueur de votre liste: xxx

Bien sûr, si vous souhaitez vérifier l'élément à un index spécifique , alors utilisez ensuite lindex pour récupérer cet élément et vérifier cela. par exemple. si {[Lindex $ myList 6] == "quelque chose"}}

Votre code à l'aide de info Existe ne fonctionne pas, car le Info existe contrôles de commande si une variable existe. Donc, vous vérifiez essentiellement s'il existe une variable dont le nom est égal à la valeur renvoyée par [lindex $ myList 6] .


3 commentaires

Qu'est-ce que tu veux dire mon "quelque chose"? J'ai utilisé si {[Lindex $ myList 6]]] EQ ""} Pour vérifier si le 7ème élève existe. Si cela n'existe pas, je suis dans le corps de la déclaration IF. Est-il recommandé d'utiliser?


"Quelque chose" est juste une corde aléatoire que j'ai choisi pour mon exemple. Vous pouvez bien sûr remplacer cela avec n'importe quelle chaîne que vous aimez. Le si {[Lindex $ myList 6]] == ""} fonctionnera probablement, mais il a une faille. Supposons que vous ayez la liste suivante: Set L {1 2 3 4 5 6 ""} . Cette liste a 7 éléments (cochez la sortie de llength $ l ). Mais votre code traiterait cette liste comme s'il n'avait que 6 éléments. Si vous souhaitez vérifier si un élément existe à l'index x , utilisez llthongueur pour vérifier si la liste est aussi longue, elle est définitivement plus explicite. Si vous ne voulez pas vérifier si l'élément a une valeur spécifique utilise lindex .


Sa vaut noter que la solution que l'OP utilise ([Lindex $ MyList 6]) n'est pas sémantiquement équivalente à la question qu'il tente de demander (cette liste a-t-elle 6 éléments). Je suis un grand partisan du code exprimant ce qu'il tente d'accomplir. La réponse postée ici par Überjesus ([Llength $ MyList] == ​​6) exprime la question qui est réellement posée, même si elles fonctionnaient correctement, ce serait la meilleure option.



14
votes

J'ai trouvé cette question parce que je voulais vérifier si une liste contient un élément spécifique , plutôt que de vérifier la longueur de la liste.

Pour voir si un élément existe dans une liste, utilisez le lSearch Fonction: xxx

Le lSearch La fonction renvoie l'index du premier élément trouvé ou -1 si l'élément donné n'a pas été 't trouvé. Via le -exact , -glob (qui correspond à la valeur par défaut) ou -regexp options, le type de recherche de modèle peut être spécifié.


0 commentaires

4
votes

Une autre façon de vérifier l'existence d'une liste dans TCL est de simplement utiliser "dans", par exemple: xxx

Il est légèrement plus propre / plus lisible!


0 commentaires