3

我有这样的列表:{ ADC } { DSD } { ASD } { YDD }

我想列出在子列表的同一索引中具有重复项的所有索引。例如,如果我想在子列表的索引 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 !

为什么 ?

4

2 回答 2

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
}
于 2012-09-03T14:33:15.280 回答
2

您可以使用lsearch -all -exact -index.

proc findElement {lst idx value} {
   return [lsearch -all -exact -index $idx $lst $value]
}
于 2012-09-03T18:28:13.947 回答