簡體   English   中英

如何在tcl中實現二維數組

[英]How to implement two dimensional arrays in tcl

需要創建二維數組援助。

我需要創建下面的情形

nblist_0 = {1,2,3,4}
nblist_1 = {3,7,5,9,1}
nblist_2 = {7,4,9,2,5}
nblist_3 = {1,2,4,6}
nblist_4 = {1,5,4}
... 

由於此后的邏輯遵循上述二維數組,因此我也需要邏輯來訪問單個數據(就像數組一樣)。 請幫助!

有兩種推薦的方法。 一種是構造列表列表,並使用lindexlset的多索引版本,另一種是構造組合鍵以與關聯數組一起使用。

嵌套列表

# Setup...
set nblist {
    {1 2 3 4}
    {3 7 5 9 1}
    {7 4 9 2 5}
    {1 2 4 6}
    {1 5 4}
}

# Reading...
set row 1
set column 3
set value [lindex $nblist $row $column]

# Writing...
lset nblist $row $column [expr {$value + 17}]

您可以使用lappend將新行添加到表中,並(在Tcl 8.6中)使用lset nblist $rowidx end+1 $initval通過元素擴展行。

foreach對行或一行的列進行迭代是微不足道的。

復合鍵

# Setup...
array set nblist {
    0,0 1 0,1 2 0,2 3 0,3 4
    1,0 3 1,1 7 1,2 5 1,3 9 1,4 1
    2,0 7 2,1 4 2,2 9 2,3 2 2,4 5
    3,0 1 3,1 2 3,2 4 3,3 6
    4,0 1 4,1 5 4,2 4
}

# Reading...
set row 1
set column 3
set value $nblist($row,$column)

# Writing...
set nblist($row,$column) [expr {$value + 17}]

通過這種方法,元素從根本上是完全無序的,而鍵從根本上是字符串,但是您可以相當簡單地訪問單個元素。 但是,沒有行或列的概念。 數組內容上的迭代會很煩人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM