问题描述
需要在TCL中比较string1和string2
set string1 {laptop Keyboard mouse MONITOR PRINTER}
set string2 {mouse}
解决方法
好吧,你可以使用:
if {$string2 in $string1} {
puts "present in the list"
}
或者你可以使用 lsearch
如果你想知道在哪里(它返回它找到元素的索引,或者 -1
如果它不存在)。当您想知道值在列表中的位置时,这是最有用的。它还具有执行二分搜索(如果您知道列表已排序)的选项,这比线性搜索快得多。
set idx [lsearch -exact $string1 $string2]
if {$idx >= 0} {
puts "present in the list at index $idx"
}
但如果您要进行大量搜索,最好使用数组或字典创建哈希表。这些非常快,但需要一些设置。设置成本是否值得取决于您的应用。
set words {}
foreach word $string1 {dict set words $word 1}
if {[dict exists $words $string2]} {
puts "word is present"
}
请注意,如果您正在处理普通用户输入,您可能需要一两个清理步骤。 Tcl 列表不是完全的句子,一旦您进入生产环境,差异就会真正让您发现。两个主要工具是 split
和 regexp -all -inline
。
set words [split $sentence]
set words [regexp -all -inline {\S+} $sentence]
了解如何进行清理需要比我更全面地了解您的输入数据。
,if {[string first $string2 $string1] != -1} {
puts "string1 contains string2"
}
或
if {[string match *$string2* $string1]} {
puts "string1 contains string2"
}