我们如何检查一个元素是否不存在于 Tcl 列表中?

How do we check if a element does not exist in Tcl list?

我知道我们可以使用 in 检查列表元素是否存在于 Tcl 列表中。

是否有另一种方法来检查列表元素是否不存在于 Tcl 列表中?

in 运算符 https://wiki.tcl-lang.org/page/In

ni 运算符 https://wiki.tcl-lang.org/page/ni

在 TCL 中我们有 inni 运算符,ni 是您问题的答案。检查上面的链接。

如果是排序列表,可以使用lsearch -sorted进行二分查找,在长列表上比inni效率更高。

set lst {1 2 3 4 5 6 8 9}
puts [expr {[lsearch -sorted -integer $lst 6] > -1}] ;# true if present
puts [expr {[lsearch -sorted -integer $lst 7] > -1}] ;# false if not present

如果您碰巧使用 dict(作为字典键)维护 haystack 值,那么 dict exists 也是一个有趣的选择:

set d [dict create 1 a 2 b 3 c 4 d 5 e 6 f]
dict exists $d 6; # in
expr {![dict exists $d 10]}; # ni

请注意,仅将列表转换为字典,反之亦然,对于检查包含的单一任务,排除不会得到回报。