2012-03-16 65 views
1

处理我有一个阵列(在TCL的散列映射),所以在命令粒子阵列的dn产生以下阵列在TCL

    dn(1) = 52638515 
       dn(11) = 324009 
       dn(12) = 257949 
       dn(13) = 298844 
       dn(14) = 442499 
       dn(15) = 417333 
       dn(2) = 49807360 
       dn(3) = 52848230 
       dn(4) = 39845888 
       dn(5) = 26633830 

,所以我想此将其设置为从1开始至长度的另一阵列( dn)..我在dn中有几个条目,就像上面的数据中间缺少索引一样。在tcl中有没有内置的数组命令?

回答

1

我想不出一个自动命令的,但你可以做一些类似如下:

set result {} 
set index 0 
foreach key [lsort -integer [array keys dn]] { 
    lappend result [incr index] $db($key) 
} 
array set newDn $result 

或者,如果你有8.6和tcllib和你进行处罚,但娱乐馋嘴:

set index 0 
array set newDn [struct::list flatten \ 
        [::struct::list mapfor x \ 
         [dict values [lsort -stride 2 -integer [array get dn]]] \ 
         {list [incr index] $x}]] 

虽然我要说的是,第一个版本是比较容易跟随:)

如果tcllib结构::名单有一个zip命令,它很可能是很多清洁剂,因为y ou可以使用iota 1-n对已排序(键)值进行压缩。