我有一个字符串,需要将该字符串与 TCL 中的字符串列表进行比较

问题描述

需要在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 列表不是完全的句子,一旦您进入生产环境,差异就会真正让您发现。两个主要工具是 splitregexp -all -inline

set words [split $sentence]
set words [regexp -all -inline {\S+} $sentence]

了解如何进行清理需要比我更全面地了解您的输入数据。

,

string first

if {[string first $string2 $string1] != -1} {
    puts "string1 contains string2"
}

if {[string match *$string2* $string1]} {
    puts "string1 contains string2"
}