zoukankan      html  css  js  c++  java
  • 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[2][2]
    
    arr[0][0] = 100

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

    义所谓的多维数组,如:

    set arr(0,0) 100
    
    set arr(0,1) 200
    
    parray arr
    
    结果=> arr(0,0) = 100
          arr(0,1) = 200
    
     

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

    引的逗号,就成了:

    set arr(00) 100
    
    parray arr
    
    结果=> arr(0,0) = 100

    arr(0,1) = 200

    四、数组操作指令

    命令格式

    说明

    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                  ;#数组元素个数 
    结果=> 4 
    
    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 命令
  • 相关阅读:
    5种类型的程序猿
    cocos2dx 关于lua 绑定的环境配置官方文档翻译与 将自己定义c++方法绑定到lua的的方法
    智能聊天机器人实现(源代码+解析)
    storm trident merger
    分析Redis架构设计
    Spring+Struts+Hibernate 简介(转)
    java面试题(开发框架)
    Jsp+Servlet+JavaBean经典MVC模式理解
    Loadrunner中影响"响应时间"的设置
    phpredis中文手册——《redis中文手册》 php版(转)
  • 原文地址:https://www.cnblogs.com/huguodong/p/5890146.html
Copyright © 2011-2022 走看看