將列表列表轉換爲單個列表。例如:tcl從子列表中製作單個列表
列表1 {1 2 {3 4 5} 6 7 {8} 9 10 {{11 12} 13} 14 {15} 16 {{{{17} 18} 19} 20} 21 22 { 23} 24 25}
轉換到
的List1 {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25}
如何將其轉換??
將列表列表轉換爲單個列表。例如:tcl從子列表中製作單個列表
列表1 {1 2 {3 4 5} 6 7 {8} 9 10 {{11 12} 13} 14 {15} 16 {{{{17} 18} 19} 20} 21 22 { 23} 24 25}
轉換到
的List1 {1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25}
如何將其轉換??
提供的葉子是簡單的話(例如,字母,數字,句號,但絕對沒有的Tcl元字符),這是相當簡單的用join
:
set s {1 2 {3 4 5} 6 7 {8} 9 10 {{11 12} 13} 14 {15} 16 {{{{17} 18} 19} 20} 21 22 {23} 24 25}
while {[set t [join $s]] ne $s} {set s $t}
puts $s
# => 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
要看到這是如何工作的,可以嘗試在一個puts
循環,在這個交互式會話內:
% while {[set t [join $s]] ne $s} {
puts $t
set s $t
}
1 2 3 4 5 6 7 8 9 10 {11 12} 13 14 15 16 {{{17} 18} 19} 20 21 22 23 24 25
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 {{17} 18} 19 20 21 22 23 24 25
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 {17} 18 19 20 21 22 23 24 25
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
請注意,這不會,如果你產生了無效的名單在任何點擴張過程中工作,因此爲什麼它是重要的避免元字符(特別是\
,{
和}
)。在生產代碼中做這種事情也不常見;需要它通常是其他地方出現問題的跡象。
隨着tcllib:
package require struct::list
set List1 {1 2 {3 4 5} 6 7 {8} 9 10 {{11 12} 13} 14 {15} 16 {{{{17} 18} 19} 20} 21 22 {23} 24 25}
puts [struct::list flatten -full $List1]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
這是使用遞歸函數一件容易的事。到目前爲止你有什麼? – Ctx