TCL语言笔记:TCL中的数组
一、介绍
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 允许索引值为包括数字字符在内的所有合法字符组成的字符串。
- array set arr1 "" ;#定义了一个空数组
- set array01(5) "Hello World"
- 结果=> Hello World
- puts $array01(5)
- 结果=>Hello World
- set array01(Hello) World
- 结果=> World
- puts $array01(Hello)
- 结果=> World
- array names array01 ;#array names 命令显示数组元素名
- 结果=> Hello 5
- array set arr2 {1 a 2 b 3 c 4 d}
- array names arr2
- 结果=> 4 1 2 3
- parray arr2 ;# 输出数组全部内容
- 结果=>
- arr2(1) = a
- arr2(2) = b
- arr2(3) = c
- arr2(4) = d
三、多维数组
在有些时候,可能需要象 C 语言这样:
- int arr[][]
- arr[][] =
来定义一个多维数组来处理数据。Tcl 并没有直接支持这种数组的格式,使用者自己可以定
义所谓的多维数组,如:
- set arr(,)
- set arr(,)
- parray arr
- 结果=> arr(,) =
- arr(,) =
由于 Tcl 数组索引的灵活性,使用时要小心,否则可能得不到预期的结果,如忘记了上面索
引的逗号,就成了:
- set arr()
- parray arr
- 结果=> arr(,) = 100
- 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 命令 则将一个列表(数据要成对)转换成一个数组。例
- array set arr [list a AAA b BBB c CCC d DDD]
- array size arr ;#数组元素个数
- 结果=>
- parray arr
- 结果=> arr(a) = AAA arr(b) = BBB arr(c) = CCC arr(d) = DDD
- set l1 [array get arr]
- 结果=> d DDD a AAA b BBB c CCC
2.array names命令
array names 返回所有元素索引名与模式 pattern 匹配的元素索引名列表。模式 pattern 和 string match 的模式格式相同。如果 pattern 没有指定,则返回所有数组元素索引名列表。
- array set a [list "School,BUPT" "BUPT" "School,NJU" "NJU" "School,NJUA" "NJUA"] % parray a
- 结果=> a(School,BUPT) = BUPT a(School,NJU) = NJU a(School,NJUA) = NJUA
- array names a "School,*"
- 结果=>School,NJU School,NJUA School,BUPT
- array names a "School,N*"
- 结果=>School,NJU School,NJUA
- array names a
- 结果=>School,NJU School,NJUA School,BUPT
array names 命令
TCL语言笔记:TCL中的数组的更多相关文章
- TCL语言笔记:TCL基础语法
一.什么是TCL Tcl 全称是 Tool command Language.它是一个基于字符串的命令语言,基础结构和语法非常简单,易于学习和掌握. Tcl 语言是一个解释性语言,所谓解释性是指不象其 ...
- Tcl语言笔记之一
1,一个TCL脚本可以包含一个或多个命令.命令之间必须用换行符或分号隔开 2,置换 substitution %set y x+100 // ...
- php学习笔记7--php中的数组
php中的数组 1.数组的定义:显式方式:$arr = array(1,2,3,4,5); $arr1 = array('name'=>'dqrcsc','age'=>'24');隐式方式 ...
- R语言笔记1--向量、数组、矩阵、数据框、列表
注释:R语言是区分大小写的 1.向量 R语言中可以将各种向量赋值为一个变量,这种赋值操作符就是等号“=”,也可以使用“<-”. 1)产生向量 (1)函数c() 例如:x1=c(2,4,6,8,0 ...
- TCL语言笔记:TCL中的控制结构命令
一.引言 控制结构允许程序根据不同的状态.条件和参数来选择不同的处理和执行路径,从而使代码具有更强的灵活性.健壮性和可读性. Tcl 提供了 if.if/else.if/elseif.foreach. ...
- TCL语言笔记:TCL中的数学函数
一.TCL数学函数列表 函数名 说明 举例 abs(arg) 取绝对值 set a –10 ; #a=-10 set a [expr abs($a)]; # a=10 acos(arg) 反余弦 s ...
- TCL语言笔记:TCL中的列表操作
一.介绍 列表则是具有特殊解释的字符串.Tcl 中的列表操作和其它 Tcl 命令一样具有相同的结构.列表可应用在诸如 foreach 这样的以列表为变元的循环命令中,也应于构建 eval 命令的延迟命 ...
- TCL语言笔记:TCL中的String命令
一.介绍 字符串是 Tcl 中的基本数据类型,所以有大量的字符串操作命令.一个比较重要的问题就是模式匹配,通过模式匹配将字符串与指定的模式(格式)相匹配来进行字符串的比较.搜索等操作. 二.strin ...
- Tcl语言笔记之二
1,表达式 1.1 操作数 TCL表达式的操作数通常是整数或实数.整数一般是十进制的, 但如果整数的第一个字符是0(zero),那么TCL将把这个整数看作八进制的,如果前两个字符是0x则这个整数被看作 ...
随机推荐
- elr_memory_pool详解
Preface Usually, memory allocation of OS is fast, especially the computer has just started. But over ...
- Color About——First
最近在Android开发学习中遇到TextView背景色以及文字颜色着色问题,在此做个记录. 首先对于颜色的选择,我推荐W3C School,上面有对网页颜色的详尽说明以及实例,还提供了对于,同一种颜 ...
- ASP.NET MVC4学习笔记之总体概述
断断续续使用ASP.NET MVC框架也有一年多了,也算积累了一些经验,唉,一直想写一些笔记好好总结一下,人太懒不想动笔,今天终于决定开始.希望自己能坚持下去. 这篇文章大体介绍ASP.NET MVC ...
- ASP.NET中的常用快捷键
想查找ASP.NET中的属性快捷键,忘记了,搜了一下,找到了ASP.NET中的常用快捷键. 大神文章:http://www.cnblogs.com/xiacao/archive/2012/06/12/ ...
- Windows 8.1 (64bit) 下搭建 Scrapy 0.22 环境
我的Windows 8.1 环境 1.下载安装Python 2.7.6 在Python官方网站中下载Python2.7.6的Windows安装包,根据默认配置安装到C:\Python27目录. 安装完 ...
- Windows Phone中的几种集合控件
前言 Windows Phone开发过程中不可避免的就是和集合数据打交道,如果之前做过WP App的开发的话,相信你已经看过了各种集合控件的使用.扩展和自定义.这些个内容在这篇博客里都没有,那么我们今 ...
- 【Go】 格式处理
格式化字符串 在golang里面获取时间戳并不难.只要加载time包.time.Now().Unix() fmt.Sprintf("%d",int64),自此,go语言的int转换 ...
- Mac OS X 安装 brew 工具!
最早的ports管理就是BSD那种,后来出现强大的Debian,弄了个dpkg+apt! Mac OS X 最早使用比较多的工具是 MacPorts,但是现在来看这个工具有点老,不是很稳定,那我们推荐 ...
- C#之多态
多态是面向对象编程中三大机制之一,其原理建立在"从父类继承而来的子类可以转换为其父类"这个规则之上,换句话说,能用父类的地方,就能用该类的子类.当从父类派生了很多子类时,由于每个子 ...
- 关于12306登陆页面dynamicJs的获取
今天帮与一个朋友探讨此事,刚开始一直是以为访问404,但是发现返回为200,没有问题,后来才知道朋友想了解的是为何浏览器可以获取到/otn/dynamicJs,但是自己手动获取就获取不到了 找了很久r ...