INITIAL_ARRAY
是
Key -> Value
B 8
C 10
A 5
E 3
D 1
要根据键获取已排序的数组,我使用
set sorted_keys_array [lsort [array names INITIAL_ARRAY]]
获取输出
Key -> Value
A 5
B 8
C 10
D 1
E 3
同样明智的是,如何根据键的值得到一个排序的tcl数组,如下面的输出?
Key -> Value
C 10
B 8
A 5
E 3
D 1
答案 0 :(得分:10)
从Tcl 8.6开始,你可以做到
lsort -stride 2 -integer [array get a]
将产生按值排序的键/值对的 flat 列表。
在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
答案 1 :(得分:1)
当我有一个数组时,以前的方法对我不起作用:
[array get a] == D 1 E 3 A 5 B 8 C 10
我执行以下操作并收到错误:
lsort -stride 2 -integer [array get a]
预期的整数但得到“D”
您还需要添加索引:
lsort -integer -stride 2 -index 1 [array get a]
D 1 C 10 E 3 A 5 B 8
然后你可以改变方向:
lsort -decreasing -integer -stride 2 -index 1 [array get a]
C 10 B 8 A 5 E 3 D 1
然后给出正确的答案