0

次の TCL 関数は n 回呼び出されます。numid と type がこの関数に渡されるたびに、各型の numid をラップしようとしています。

例えば

渡された値が次の場合

2       BLACK
1       RED
1       BLACK
3       BLUE
1       BLUE
2       BLUE
2       RED

私が得ている出力は、 set_numid_type 関数を使用して次のとおりです

black_color_str 2 1
red_color_str 1 2
blue_color_str 3 1 2

しかし、私が必要とする出力は次のとおりです。型が連続していない場合は、別の変数型に追加する必要があります。

black_color_str 2 
red_color_str 1
black_color_str 1
blue_color_str 3 1 2 (since BLUE color is called in sequence)
red_color_str 2



proc set_numid_type {numid type} {

  variable black_color_str
  variable red_color_str
  variable blue_color_str

  if {$type == "BLACK"} {

      if {![info exists black_color_str] || ![llength $ black_color_str]} {
          set black_color_str ""
          }

       lappend black_color_str $numid
   }

   if {$type == "RED"} {

      if {![info exists red_color_str] || ![llength $ red_color_str]} {
          set red_color_str ""
         }

       lappend red_color_str $numid
   }

   if {$type == "BLUE"} {

      if {![info exists blue_color_str] || ![llength $ blue_color_str]} {
          set blue_color_str ""
          }

       lappend blue_color_str $numid
   }

}
4

1 に答える 1

0

これは、入力リストを操作して出力リストを返すバージョンです。本当に必要な場合は、グローバル変数で動作するように変更できます。

proc GroupSequences { inputPairs } {
    if {[llength $inputPairs] == 0} return {}       
    set sequences {}
    set lastColour ""
    set latestSequence {}
    foreach pair $inputPairs {
        puts 1
        if {"[lindex $pair 1]" != $lastColour} {
            puts 2
            if {[llength $latestSequence] > 0} {
                puts 3
                lappend sequences $latestSequence
            }
            puts 4
            set latestSequence [lreverse $pair]
            set lastColour [lindex $pair 1]
        } else {
            puts 5
            lappend latestSequence [lindex $pair 0]
        }
    }
    puts 6
    lappend sequences $latestSequence
    return $sequences
}

set input [list { 2 "black" } { 1 "red" } { 1 "black" } {3 "blue" } { 1 "blue" } { 2 "blue" } { 2 "red" } ]
set seq [GroupSequences $input]
于 2013-01-18T07:15:32.650 に答える