如何根据键的值对TCL数组进行排序?

use*_*191 4 arrays sorting tcl

INITIAL_ARRAYIS

Key -> Value
B      8
C     10
A      5
E      3
D      1
Run Code Online (Sandbox Code Playgroud)

为了获得基于密钥的排序数组,我使用

set sorted_keys_array [lsort [array names INITIAL_ARRAY]]
Run Code Online (Sandbox Code Playgroud)

得到输出

Key -> Value
A     5
B     8
C     10
D     1
E     3
Run Code Online (Sandbox Code Playgroud)

同样明智的是,如何根据键的获得一个排序的tcl数组,如下面的输出?

Key -> Value
 C     10
 B     8 
 A     5
 E     3
 D     1
Run Code Online (Sandbox Code Playgroud)

kos*_*tix 10

从Tcl 8.6开始,你可以做到

lsort -stride 2 -integer [array get a]
Run Code Online (Sandbox Code Playgroud)

这将产生一个按值排序的键/值对的平面列表.

lsort获得该-stride选项之前,您不得不求助于从平面列表array get返回中构建列表列表,然后使用以下-index选项对其进行排序lsort:

set x [list]
foreach {k v} [array get a] {
    lappend x [list $k $v]
}
lsort -integer -index 1 $x
Run Code Online (Sandbox Code Playgroud)