获取搜索项目在列表中的所有索引,而不仅仅是第一个

时间:2017-09-15 07:49:12

标签: list search tcl

有一个要搜索的列表

top -l 2 -n 5 -o mem | sed '1,10d;n;' | awk '{ printf("%-8s  %-12s  %-6s %-6s\n", $1, $2, $3, $8); }'

我想找到haystack中存在searchstring的所有索引:

set haystack [list a b c d e e f e]

我尝试过使用

set needle e

但我没有得到预期的答案4 5 7。

3 个答案:

答案 0 :(得分:3)

这会给你你想要的东西:

lsearch -all $haystack $needle

你写的是什么:

set foundat [expr {[lsearch -all $haystack  $needle] >= 0}]

如果找到了搜索结果,则在foundat中的位置。

答案 1 :(得分:0)

命令:

set foundat [expr {[lsearch -all $haystack  $needle] >= 0}]

找到$needle$haystack中的所有位置,并生成所有这些位置的列表。这是一个数字列表。然后它将列表作为字符串与值0进行比较,除非列表中只有一个项目,但效果是相同的,因为它基本上最终产生一个真值找到值的任何结果。但实际上你只是想要:

set foundat [lsearch -all $haystack $needle]

set haveFoundAny [expr { [llength $foundat] != 0 }]

什么都没找到?空列表。发现了什么?非空列表。

答案 2 :(得分:0)

您提到的列表

set haystack [list a b c d e e f e]

set needle e

这会给你你想要的东西:

set e_index [lsearch -all $haystack $needle]

puts $e_index