我有这样的清单: {A D C} {D S D} {A S D} {Y D D}
我想在子列表的相同索引中列出所有具有重复项的索引。 例如,如果我想在子列表中搜索索引2处的每个“D”,我想知道列表的索引(这里是0和3)
这是代码:
proc findElement {lst idx value} {
set i 0
foreach sublist $lst {
if {[string equal [lindex $sublist $idx] $value]} {
return $i
}
incr i
}
return -1
}
当我称之为findElement $ toto 1 D
它只返回0!
为什么?
答案 0 :(得分:3)
因为当$ i = 0时找到匹配项时有一个return语句。
尝试以下操作,而不是返回所有匹配索引的列表
proc findElement {lst idx value} {
set i 0
set return_list [list]
foreach sublist $lst {
puts "i=$i sublist=$sublist"
if {[string equal [lindex $sublist $idx] $value]} {
puts "Found $i"
lappend return_list $i
}
incr i
}
return $return_list
}
答案 1 :(得分:2)
您可以使用lsearch -all -exact -index
制作更短,更快的版本。
proc findElement {lst idx value} {
return [lsearch -all -exact -index $idx $lst $value]
}