TCL基础教程——(8)数组

来源:互联网 发布:java培训机构0首付 编辑:程序博客网 时间:2024/06/10 15:49

说到了数组,马上就有人想到了C语言中的数组,也有人会想到了我在前面的文章中提到,TCL中的列表和C语言的数组类似,可能有人就开始迷糊了?那么TCL中的数组究竟是什么样子呢?

TCL中,数组是带有字符串值索引的变量,请注意,是字符串索引,而不是数字索引,所以这里就是TCL数组的最大不同。在数组内部,是用了散列表。

数组的索引是写在数组名后的圆括号中,

格式为

arrayname(index)

如这个程序:

#!/usr/bin/tclsh

set arr(test1) 1

set arr(test2) 2

puts $arr(test1)

set var1 $arr(test2)

puts $var1

其运行结果为

1

2

能看到,还可以通过$arr(test)来获得相应的值或者赋值给其他变量。

 

对于数组的操作命令如下:

命令

说明

array exist arr

如果arr是数组的话,就返回1

array get arr ?pattern

返回一个包含交替出现索引和对应数组值的列表,pattern是匹配索引,在没指定的情况下,匹配所有

array names arr? pattern

返回包含为arr定义的所有索引的列表,或是返回那些与字符串匹配模式pattern匹配的索引

array set arr list

根据list初始化数组

array size arr

返回为array定义的索引的数量

array startsearch arr

返回用于对array进行搜索的标记

array nextelement arr id

返回在记号id所标识的搜索中的数组的下一个元素的值,如果没有,就返回空

array anymore arr id

如果搜索中还有剩余的元素,就返回1

array donesearch arrid

结束由id标识的搜索

下面看一个例子,将会用到上面的部分命令

#!/usr/bin/tclsh

set list1 [list color1 red color2 yellow color3 blue]

# Use array set to change the list to array

array set array1 $list1

# Use array exist to detect this array

puts [array exist array1]

# Use array names to print all the index

puts [array names array1]

# Use array size to print the size of array

puts [array size array1]

其执行结果如下

1

color1 color2 color3

3

而对于一个数组来说,如果想输出该数组所有的值,就可以使用array names先获得键值的列表,然后通过对这个列表的遍历获得每个键值对应的数组值,最后输出数组值。看这个程序。

#!/usr/bin/tclsh

set list1 [list color1 red color2 yellow color3 blue]

# Use array set to change the list to array

array set array1 $list1

# Use array names to print all the index

set aindex [array names array1]

for {set i 0} {$i<[llength $aindex]} {incr i} {

        puts $array1([lindex $aindex $i])

}

其运行结果为:

red

yellow

blue

同样的,如果要将数组变为列表的话,也需要通过先获得键值列表,然后获得数组值的方法,最后用lappend来具体实现,有兴趣的朋友可以自己试试。