2015-08-24 20 views
0

任何人都可以讓我知道哈希函數如何在tcl數組中工作。數組名稱將以何種順序打印TCL中的密鑰?

for {set i 1} {$i<21} {incr i} { 
    set a($i) $i 
} 
set a(30) $i 
puts [lindex [split [array statistics a] \n] 0] 
puts [array names a] 

這個程序我得到的輸出如下。

 
21 entries in table, 16 buckets 
17 18 1 20 19 2 3 4 5 6 7 8 9 10 11 30 12 13 14 15 16 

我想知道,在哪裏按鍵在這裏打印。

回答

1

array names命令以「任意」順序生成數組的鍵。它實際上是底層散列表的當前自然迭代順序,隨着數組的增長,這個順序可能會發生變化,除了通過引用數組的實現和歷史記錄之外,實際上是非常難以解釋的。因爲它很困難,我們只是傾向於說「隨機」;它不是,但它可能是(除了產生隨機數的目的;它會是一個可怕的 PRNG)。它總是這樣工作。其他array子命令將使用相同的順序,特別是array get和非常少使用的迭代器子命令。

如果你想要一個特定的訂單,你必須自己排序。 lsort命令可能對此有用。或者你可以使用dict;那些維護插入順序(但技術上的價值,所以你不能trace元素或upvar它)。