一、介绍

Tcl 中的数组和其他高级语言的数组有些不同:Tcl 数组元素的索引,或称键值,可以是任意的字符串,而且其本身没有所谓多维数组的概念。数组的存取速度要比列表有优势,数组在内部使用散列表来存储,每个元素存取开销几乎相同,而列表的存取数据花非时间与其长度成正比。

二、数组的定义与格式

数组索引是由圆括号()来指定的,每个数组元素变量名的格式是“数组名(索引值)”。数组

元素使用 set 命令来定义和赋值:

[语法]set  arrName(index) value

也可以用 array 命令来定义一个数组:

[语法]array set arrName { index1 value1 index2 value2 ...

 

这个命令在定义数组的同时可以定义其元素和元素值。需要注意元素索引(index-n)与元素值(valun-n)要成对输入,否则会出错。用命令 array set arrName “”可以定义一个空数组。用普通变量值的获取方法——替换操作来获取数组元素值:

[语法]set val  $arrName(index)

数组元素索引也支持替换操作,包括变量和命令替换,如:

 

[语法] set val $arrName($index)          

              set val $arrName([expr $index + 1])

Tcl 数组索引的值不象其他高级语言如 C 语言那样,要求一定是整数。Tcl 允许索引值为包括数字字符在内的所有合法字符组成的字符串。

  1. array set arr1 "" ;#定义了一个空数组
  2. set array01(5) "Hello World"
  3. 结果=> Hello World
  4.  
  5. puts $array01(5)
  6. 结果=>Hello World
  7.  
  8. set array01(Hello) World
  9. 结果=> World
  10.  
  11. puts $array01(Hello)
  12. 结果=> World
  13.  
  14. array names array01 ;#array names 命令显示数组元素名
  15. 结果=> Hello 5
  16.  
  17. array set arr2 {1 a 2 b 3 c 4 d}
  18. array names arr2
  19. 结果=> 4 1 2 3
  20.  
  21. parray arr2 ;# 输出数组全部内容
  22. 结果=>
  23. arr2(1) = a
  24. arr2(2) = b
  25. arr2(3) = c
  26. arr2(4) = d

三、多维数组

在有些时候,可能需要象 C 语言这样:

  1. int arr[][]
  2.  
  3. arr[][] =

来定义一个多维数组来处理数据。Tcl 并没有直接支持这种数组的格式,使用者自己可以定

义所谓的多维数组,如:

  1. set arr(,)
  2.  
  3. set arr(,)
  4.  
  5. parray arr
  6.  
  7. 结果=> arr(,) =
  8. arr(,) =

由于 Tcl 数组索引的灵活性,使用时要小心,否则可能得不到预期的结果,如忘记了上面索

引的逗号,就成了:

  1. set arr()
  2.  
  3. parray arr
  4.  
  5. 结果=> arr(,) = 100
  6.  
  7. arr(,) =

四、数组操作指令

命令格式

说明

array exists  arr

判断 arr 是否为数组变量,是返回 1

array get arr  ?pattern?

返回一个包含交替出现索引、元素值的列表。pattern 选择匹配索引。如果不指定 pattern,返回所有的元素索引和值。

array names  arr ?pattern?

返回索引

array  set  arr list

初始化数组

array  size  arr

数组大小

array  startsearch  arr

返回用于 arr 进行搜索的搜索标记

array  nextelement arr index

返回下一个元素值,如果已在尾部的话,返回空串

array donesearch arr index

结束有 index 标识的搜索

parray arr

打印出 arr 的所有元素变量名和元素值

 1.array get 命令

array get 命令提取数组索引、元素值对并将这些值对组织成一个列表。而 array  set 命令 则将一个列表(数据要成对)转换成一个数组。例

  1. array set arr [list a AAA b BBB c CCC d DDD]
  2. array size arr ;#数组元素个数
  3. 结果=>
  4.  
  5. parray arr
  6. 结果=> arr(a) = AAA arr(b) = BBB arr(c) = CCC arr(d) = DDD
  7.  
  8. set l1 [array get arr]
  9. 结果=> d DDD a AAA b BBB c CCC

2.array names命令

array names 返回所有元素索引名与模式 pattern 匹配的元素索引名列表。模式 pattern 和 string match 的模式格式相同。如果 pattern 没有指定,则返回所有数组元素索引名列表。

  1. array set a [list "School,BUPT" "BUPT" "School,NJU" "NJU" "School,NJUA" "NJUA"] % parray a
  2. 结果=> a(School,BUPT) = BUPT a(School,NJU) = NJU a(School,NJUA) = NJUA
  3.  
  4. array names a "School,*"
  5. 结果=>School,NJU School,NJUA School,BUPT
  6.  
  7. array names a "School,N*"
  8. 结果=>School,NJU School,NJUA
  9.  
  10. array names a
  11. 结果=>School,NJU School,NJUA School,BUPT
array names 命令

TCL语言笔记:TCL中的数组的更多相关文章

  1. TCL语言笔记:TCL基础语法

    一.什么是TCL Tcl 全称是 Tool command Language.它是一个基于字符串的命令语言,基础结构和语法非常简单,易于学习和掌握. Tcl 语言是一个解释性语言,所谓解释性是指不象其 ...

  2. Tcl语言笔记之一

    1,一个TCL脚本可以包含一个或多个命令.命令之间必须用换行符或分号隔开 2,置换 substitution %set y x+100                               // ...

  3. php学习笔记7--php中的数组

    php中的数组 1.数组的定义:显式方式:$arr = array(1,2,3,4,5); $arr1 = array('name'=>'dqrcsc','age'=>'24');隐式方式 ...

  4. R语言笔记1--向量、数组、矩阵、数据框、列表

    注释:R语言是区分大小写的 1.向量 R语言中可以将各种向量赋值为一个变量,这种赋值操作符就是等号“=”,也可以使用“<-”. 1)产生向量 (1)函数c() 例如:x1=c(2,4,6,8,0 ...

  5. TCL语言笔记:TCL中的控制结构命令

    一.引言 控制结构允许程序根据不同的状态.条件和参数来选择不同的处理和执行路径,从而使代码具有更强的灵活性.健壮性和可读性. Tcl 提供了 if.if/else.if/elseif.foreach. ...

  6. TCL语言笔记:TCL中的数学函数

    一.TCL数学函数列表 函数名 说明 举例 abs(arg) 取绝对值 set a –10  ; #a=-10 set a [expr abs($a)]; # a=10 acos(arg) 反余弦 s ...

  7. TCL语言笔记:TCL中的列表操作

    一.介绍 列表则是具有特殊解释的字符串.Tcl 中的列表操作和其它 Tcl 命令一样具有相同的结构.列表可应用在诸如 foreach 这样的以列表为变元的循环命令中,也应于构建 eval 命令的延迟命 ...

  8. TCL语言笔记:TCL中的String命令

    一.介绍 字符串是 Tcl 中的基本数据类型,所以有大量的字符串操作命令.一个比较重要的问题就是模式匹配,通过模式匹配将字符串与指定的模式(格式)相匹配来进行字符串的比较.搜索等操作. 二.strin ...

  9. Tcl语言笔记之二

    1,表达式 1.1 操作数 TCL表达式的操作数通常是整数或实数.整数一般是十进制的, 但如果整数的第一个字符是0(zero),那么TCL将把这个整数看作八进制的,如果前两个字符是0x则这个整数被看作 ...

随机推荐

  1. elr_memory_pool详解

    Preface Usually, memory allocation of OS is fast, especially the computer has just started. But over ...

  2. Color About——First

    最近在Android开发学习中遇到TextView背景色以及文字颜色着色问题,在此做个记录. 首先对于颜色的选择,我推荐W3C School,上面有对网页颜色的详尽说明以及实例,还提供了对于,同一种颜 ...

  3. ASP.NET MVC4学习笔记之总体概述

    断断续续使用ASP.NET MVC框架也有一年多了,也算积累了一些经验,唉,一直想写一些笔记好好总结一下,人太懒不想动笔,今天终于决定开始.希望自己能坚持下去. 这篇文章大体介绍ASP.NET MVC ...

  4. ASP.NET中的常用快捷键

    想查找ASP.NET中的属性快捷键,忘记了,搜了一下,找到了ASP.NET中的常用快捷键. 大神文章:http://www.cnblogs.com/xiacao/archive/2012/06/12/ ...

  5. Windows 8.1 (64bit) 下搭建 Scrapy 0.22 环境

    我的Windows 8.1 环境 1.下载安装Python 2.7.6 在Python官方网站中下载Python2.7.6的Windows安装包,根据默认配置安装到C:\Python27目录. 安装完 ...

  6. Windows Phone中的几种集合控件

    前言 Windows Phone开发过程中不可避免的就是和集合数据打交道,如果之前做过WP App的开发的话,相信你已经看过了各种集合控件的使用.扩展和自定义.这些个内容在这篇博客里都没有,那么我们今 ...

  7. 【Go】 格式处理

    格式化字符串 在golang里面获取时间戳并不难.只要加载time包.time.Now().Unix() fmt.Sprintf("%d",int64),自此,go语言的int转换 ...

  8. Mac OS X 安装 brew 工具!

    最早的ports管理就是BSD那种,后来出现强大的Debian,弄了个dpkg+apt! Mac OS X 最早使用比较多的工具是 MacPorts,但是现在来看这个工具有点老,不是很稳定,那我们推荐 ...

  9. C#之多态

    多态是面向对象编程中三大机制之一,其原理建立在"从父类继承而来的子类可以转换为其父类"这个规则之上,换句话说,能用父类的地方,就能用该类的子类.当从父类派生了很多子类时,由于每个子 ...

  10. 关于12306登陆页面dynamicJs的获取

    今天帮与一个朋友探讨此事,刚开始一直是以为访问404,但是发现返回为200,没有问题,后来才知道朋友想了解的是为何浏览器可以获取到/otn/dynamicJs,但是自己手动获取就获取不到了 找了很久r ...