gpt4 book ai didi

tcl - 如何在 TCL 中比较条件与多个值

转载 作者:行者123 更新时间:2023-12-04 14:32:39 26 4
gpt4 key购买 nike

我正在尝试使用 if 条件进行比较

xorg != "t8405" or "t9405" or "t7805" or "t8605" or "t8705"

我想比较 xorg 是否不等于右侧的所有这些值,然后执行 Y。我想弄清楚如何才能更好地进行更智能的比较,或者 shell 我将 xorg 与一一值进行比较?问候

最佳答案

我认为 inni (not in) 运算符是您应该关注的。他们测试列表的成员资格(或非成员资格)。在这种情况下:

if {$xorg ni {"t8405" "t9405" "t7805" "t8605" "t8705"}} {
puts "it wasn't in there!"
}

如果您有很多这样的东西并且经常进行测试,那么实际上最好将这些值放入数组的键中并使用 info isn't:

foreach key {"t8405" "t9405" "t7805" "t8605" "t8705"} {
set ary($key) 1
}

if {![info exists ary($xorg)]} {
puts "it wasn't in there!"
}

以这种方式需要更多的设置,但之后每次测试实际上会更快(尤其是从 8.5 开始)。加速是因为数组在内部使用快速哈希表实现;散列查找比线性表扫描更快。您还可以使用字典(大约用 dict set 代替 set,用 dict isn's 代替 info isn't),但速度相似。

如果您按顺序排列该列表,最后的选择是使用 lsearch -sorted,因为这会从线性扫描切换到二进制搜索。这也可以非常快,并且可能没有设置成本(如果您首先存储排序的列表),但根据我的经验,这是最不明确的选项。 (in 运算符在内部使用非常简化的lsearch,但只是在线性扫描模式下。)

# Note; I've pre-sorted this list
set items {"t7805" "t8405" "t8605" "t8705" "t9405"}

if {[lsearch -sorted -exact $items $xorg] < 0} {
puts "it wasn't in there!"
}

如果我有一组方便的数组键,我通常使用成员运算符(因为它们很简单)或 info isn't。我在实践中经常遇到后者......

关于tcl - 如何在 TCL 中比较条件与多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41731750/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com