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

时间:2013-02-08 09:49:42

标签: arrays sorting tcl

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

2 个答案:

答案 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

然后给出正确的答案