当前位置:  开发笔记 > 编程语言 > 正文

如何在TCL中将条件与多个值进行比较

如何解决《如何在TCL中将条件与多个值进行比较》经验,为你挑选了1个好方法。

我试图比较使用if条件

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

我想比较一下,如果xorg不等于右侧的所有这些值,那么执行Y.我试图找出如何更好地进行智能比较或shell我将xorg与逐个值进行比较?问候



1> Donal Fellow..:

我认为inni(n ot i n)运算符是你应该看的.他们测试列表的成员资格(或非成员资格).在这种情况下:

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

如果你有很多这些东西并经常测试,那么你最好把这些值放入数组的键中并使用info exists:

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代替setdict exists不是代替info exists)但速度相似.

最后一个选项是使用,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 exists我有一组方便的数组键.我经常在实践中使用后者......

推荐阅读
linjiabin43
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有