4

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
4

2 回答 2

10

从 Tcl 8.6 开始,你可以做

lsort -stride 2 -integer [array get a]

这将生成按值排序的键/值对的平面列表。

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
于 2013-02-08T10:24:41.597 回答
2

当我有一个数组时,以前的方法对我不起作用:

[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

然后给出正确答案

于 2017-10-16T09:42:46.123 回答