我们如何检查一个元素是否不存在于 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 中我们有 in
和 ni
运算符,ni
是您问题的答案。检查上面的链接。
如果是排序列表,可以使用lsearch -sorted
进行二分查找,在长列表上比in
或ni
效率更高。
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
请注意,仅将列表转换为字典,反之亦然,对于检查包含的单一任务,排除不会得到回报。
我知道我们可以使用 in
检查列表元素是否存在于 Tcl 列表中。
是否有另一种方法来检查列表元素是否不存在于 Tcl 列表中?
in
运算符 https://wiki.tcl-lang.org/page/In
ni
运算符 https://wiki.tcl-lang.org/page/ni
在 TCL 中我们有 in
和 ni
运算符,ni
是您问题的答案。检查上面的链接。
如果是排序列表,可以使用lsearch -sorted
进行二分查找,在长列表上比in
或ni
效率更高。
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
请注意,仅将列表转换为字典,反之亦然,对于检查包含的单一任务,排除不会得到回报。