You are here

특별한 경우의 소트 방법입니다.

admin의 아바타

예를 들어 아래와 같은 리스트가 있다고 보죠.

set list [list sum_r_0_ sum_r_1_ sum_r_10_ sum_r_11_ sum_r_12_ sum_r_13_ sum_r_14_ sum_r_15_ sum_r_2_ sum_r_3_ sum_r_4_ sum_r_5_ sum_r_6_ sum_r_7_ sum_r_8_ sum_r_9_]

위와 같은 특별한 리스트의 경우 예를 들어 중간에 숫자가 나온다던지..

이런 경우 소트를 하고싶다면 lsort 의 -command 옵션을 사용합니다.

우선 아래와 같은 소트 함수를 만듭니다.

# 숫자를 분리후 서로 비교합니다.
proc compare {one two} {
        set one [lindex [split $one _] end-1]
        set two [lindex [split $two _] end-1]
        if { $one < $two } {
                return -1
        } elseif { $one > $two} {
                return 1
        } else {
                return 0
        }
}

다음 lsort를 호출합니다.

set sorted [lsort -command compare $list]
puts $sorted

결과는 다음과 같습니다.

sum_r_0_ sum_r_1_ sum_r_2_ sum_r_3_ sum_r_4_ sum_r_5_ sum_r_6_ sum_r_7_ sum_r_8_ sum_r_9_ sum_r_10_ sum_r_11_ sum_r_12_ sum_r_13_ sum_r_14_ sum_r_15_
포럼: