2017-08-25 257 views
0

我有如下嵌套數組:如何獲取嵌套的數組值?

array set arrayA {0 {1 a 2 b 3 c 4 d}} 

如果我想更新對ArrayA這樣的:

set arrayA(0)(1) "update" 

它不能獲得{0 {1更新2 B ...} },如何得到它?謝謝!

回答

1

Tcl數組不能嵌套,但你的代碼仍然有效。在arrayA,元素0的值是一個dict,這樣你就可以獲取和設置其成員dict操作:

% dict get $arrayA(0) 1 
a 
% dict set arrayA(0) 1 update 
1 update 2 b 3 c 4 d 

另一種選擇是使用複合名稱爲陣成員:

array set arrayA {0.1 a 0.2 b 0.3 c 0.4 d 1.1 aa 1.2 ab} 

並使用arrayA(0.1),arrayA(0.$foo)等來訪問它們。使用哪個分隔符主要是一個偏好問題,唯一的規則是該名稱必須是適當的列表。你甚至不真的需要一個分隔符,只要你總是在不斷變化的元素名稱:

% array set arrayA {{0 1} a {0 2} b} 
% set idx {0 1} 
0 1 
% set arrayA($idx) 
a 

文檔:

arraydict

+0

明白了,非常感謝! – Jimmy

+0

@Jimmy:np,當我找到一個鍵盤時詳細闡述了一下。 –

+0

很久以前,它可能通過一個upvar的怪異嵌套數組,但是根本沒有方便的語法,它確實是一個bug。自至少8.4以來,你無法嵌套它們; upvar代碼現在只會使變量具有與鏈接到的變量相同的屬性。 –