2012-09-03 4 views
3

나는 목록의이 종류가 있습니다 {ADC} {DSD} {ASD} {YDD을}반환 지수 8.4

난에 중복이있는 모든 인덱스를 나열 할

하위 목록의 동일한 색인 예를 들어 내가 하위 목록에서 인덱스 2에서 모든 "D"를 serach하려는 경우, 나는 목록의 인덱스 알고 싶다 (여기에 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을 반환한다!

왜?

답변

3

$ I = 0

대신 일치하는 모든 인덱스

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 
} 
+0

감사합니다, 그것은 ... :-)은'-index' 옵션은 Tcl 8.5을 필요로 – heyhey

+0

작동합니다. – TrojanName

2

당신은 짧은을 할 수있는 목록을 반환 다음을 시도 할 때 일치하는 항목을 발견하면 당신은 return 문을 가지고 있기 때문에 lsearch -all -exact -index의 더 빠른 버전입니다.

proc findElement {lst idx value} { 
    return [lsearch -all -exact -index $idx $lst $value] 
} 
+2

을 내가 기뻐 –