我有一個數組完成的過程。爲了返回它,我使用「數組獲取」來檢索列表。此列表然而,這並不只包含我的數組entrys,而且他們的指標:使用數組獲取後,如何刪除TCL中的索引
所以我的陣列[ a b c d ]
變成一個列表{ 0 a 1 b 2 c 3 d }
我怎樣才能擺脫這些索引編號,而不會干擾列表的順序?
我有一個數組完成的過程。爲了返回它,我使用「數組獲取」來檢索列表。此列表然而,這並不只包含我的數組entrys,而且他們的指標:使用數組獲取後,如何刪除TCL中的索引
所以我的陣列[ a b c d ]
變成一個列表{ 0 a 1 b 2 c 3 d }
我怎樣才能擺脫這些索引編號,而不會干擾列表的順序?
我覺得這是使用foreach
循環的最簡單和最基本的方法:
% set list {0 a 1 b 2 c 3 d}
% set entrylist {}
% foreach {id entry} $list {
% lappend entrylist $entry
% }
% puts $entrylist
a b c d
好主意!謝謝 – Lumpi
有幾個選項,除了使用foreach
:
# [array get] actually returns a dictionary
puts [dict values $list]
# Could do this too
set entrylist {}
dict for {- entry} $list {
lappend entrylist $entry
}
puts $entrylist
有Tcl 8.6更多的可能性:
puts [lmap {- entry} $list {set entry}]
(還有一個dict map
,但在這裏是沒有用的。)
我喜歡dict values
...
如果你已經有一個數組和工作,Tcl的8.5或更高版本,使用dict values
:
set arr(0) a
set arr(1) b
set arr(2) c
set arr(3) d
puts [dict values [array get arr]]
但最好是使用一個簡單的list
:
set mylist {a b c d}
lset list 1 boo
puts [lindex $mylist 1]
lappend mylist eff
數組是關聯的。總是。
只是一個(遲來的)想法。爲什麼?如果你想要一個列表,爲什麼不讓'proc'生成一個列表? – nurdglaw
數組沒有順序,您不能保證獲得該列表。使用字典和「字典值」。 – potrzebie
一般來說,如果您想要將對象傳遞給/來自特定代碼或想要執行諸如獲取值集合(即,如potrzebie寫入,字典值)那樣,我推薦使用字典。它只是簡化了生活,字典語法仍然非常直觀且易於使用。 –