TCL 中 lsort 的奇数输出

Odd outputs from lsort in TCL

我正在使用 Tcl 中的过程来计算给定变量的项目数。我正在使用数组 'store' 初始计数。从那里,我将它们附加到一个列表中(因为我已经阅读并了解到列表在 Tcl 中更容易操作和使用)。

我想按第二个数字从大到小对我的计数列表进行排序。我有:

$ns at finalTime {
    for {set i 0} {$i < [llength $subClusters]} {incr i} {
        puts "Member count $i: $count($i)"
        lappend countList "$i $count($i)"
    }
    puts $countList
    puts [lsort -decreasing -index 1 $countList]
    #set $countList [lsort -decreasing -index 1 $countList]
}

$ns at finalTime {
    puts $countList
}

但是,我在某些运行中得到了一个非常奇怪的输出:

# Original list:
{0 11} {1 3} {2 7} {3 13} {4 9} {5 2} {6 9} {7 8} {8 11} {9 10} {10 10} {11 3} {12 3} {13 12} {14 12} {15 12} {16 1} {17 10} {18 3} {19 9}
# Should be sorted list
{4 9} {6 9} {19 9} {7 8} {2 7} {1 3} {11 3} {12 3} {18 3} {5 2} {3 13} {13 12} {14 12} {15 12} {0 11} {8 11} {9 10} {10 10} {17 10} {16 1}

lsort 列表在大约 20% 的运行中是正确的。为什么我在其他人身上得到如此奇怪的输出?它似乎在排序过程中自行重置并返回到最大的第二个整数并从那里下降。另一个提示,当第二个整数的长度大于 10 或 2 位时,它就会分崩离析。我是在引用错误的东西吗?我不明白为什么它有时有效而其他无效。

我需要获取重新排序的列表并将其提供给另一个过程。

默认情况下 lsort 执行 ascii 排序。因为 '9' 在 ascii table 中出现的时间比 '1' 晚,所以 9 被认为高于 13。如果你想将数字作为整数进行比较,你必须使用 -integer 选项告诉 lsort:

puts [lsort -integer -decreasing -index 1 $countList]