2012-07-16 138 views
1

我是TCL新手,一直在自己練習。現在,我正在閱讀TCL中的數組,並試圖對數組進行反轉。該陣列TestArr是如何在TCL中反轉陣列

Zero Orange 
First Apple 
Second Banana 

所以,基本上我想使它

Zero Banana 
First Apple 
Second Orange 

但是,我無法找到一個方法來發現的第一個元素的索引或最後一個元素的索引,因爲使用 foreach {index value} [array get TestArr]將不按順序返回索引值。

C++代碼將是:

for(int i=0;i>end;end--,i++) 
{ 
    int temp = TestArr[i]; 
    TestArr[i] = TestArr[j]; 
    TestArr[j] = temp; 
} 

有沒有辦法在TCL實現這一目標?

+3

看來,在TCL中一個數組實際上是一個哈希映射或字典,你真正想要的是一個列表。因此他們是無序的。 – OmnipotentEntity 2012-07-16 03:22:43

+1

有什麼理由說你要將數組鍵稱爲「Zero」,「First」和「Second」,還是你真的想要一個OmnipotentEntity建議的列表? – 2012-07-16 03:28:13

回答

3

在TCL中,「array」實際上是perl中的hash map或C++中的std::map或python中的dict。因此,它們是無序的,所以重新排序它們是沒有意義的。

你真正想要在TCL中被稱爲list。而反轉你的名單的功能叫做lreverse

TCL List documentation

lreverse documentation

從下面的評論:

lreverse在8.5中加入。在8.4中,你自己用類似的代碼:for {set i [llength $lst]} {[incr i -1] >= 0} {} {lappend reversed [lindex $lst $i]} - Donal Fellows

+0

謝謝,我會研究一下! – coffeeak 2012-07-16 06:15:48

+0

當我嘗試使用逆時,它表示無效的命令名稱「逆向」 – coffeeak 2012-07-16 06:18:04

+0

你如何嘗試使用它?你有沒有諮詢文件?什麼版本的TCL? – OmnipotentEntity 2012-07-16 06:53:30