Tcl - 数组


数组是使用索引对一组元素进行系统排列。传统数组的语法如下所示。

set ArrayName(Index) value

下面显示了创建简单数组的示例。

#!/usr/bin/tclsh

set languages(0) Tcl
set languages(1) "C Language"
puts $languages(0)
puts $languages(1)

执行上述代码时,会产生以下结果 -

Tcl
C Language

数组大小

计算数组大小的语法如下所示。

[array size variablename]

打印尺寸的示例如下所示。

#!/usr/bin/tclsh

set languages(0) Tcl
set languages(1) "C Language"
puts  [array size languages]

执行上述代码时,会产生以下结果 -

2

数组迭代

不过,数组索引可以是不连续的,例如为索引 1 指定的值,然后为索引 10 指定的值,依此类推。但是,如果它们是连续的,我们可以使用数组迭代来访问数组的元素。用于打印数组元素的简单数组迭代如下所示。

#!/usr/bin/tclsh

set languages(0) Tcl
set languages(1) "C Language"
for { set index 0 }  { $index < [array size languages] }  { incr index } {
   puts "languages($index) : $languages($index)"
}

执行上述代码时,会产生以下结果 -

languages(0) : Tcl
languages(1) : C Language

关联数组

在 Tcl 中,所有数组本质上都是关联的。数组的存储和检索没有任何特定的顺序。关联数组的索引不一定是数字,并且可以稀疏填充。下面显示了具有非数字索引的关联数组的简单示例。

#!/usr/bin/tclsh

set personA(Name) "Dave"
set personA(Age) 14
puts  $personA(Name)
puts  $personA(Age)

执行上述代码时,会产生以下结果 -

Dave
14

数组索引

检索数组索引的语法如下所示。

[array names variablename]

打印尺寸的示例如下所示。

#!/usr/bin/tclsh

set personA(Name) "Dave"
set personA(Age) 14
puts [array names personA]

执行上述代码时,会产生以下结果 -

Age Name

关联数组的迭代

您可以使用数组的索引来迭代关联数组。一个例子如下所示。

#!/usr/bin/tclsh

set personA(Name) "Dave"
set personA(Age) 14
foreach index [array names personA] {
   puts "personA($index): $personA($index)"
}

执行上述代码时,会产生以下结果 -

personA(Age): 14
personA(Name): Dave