2012-03-16 71 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對已排序(鍵)值進行壓縮。