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 に答える