Tcl-12. 数组

news2024/11/24 0:39:51

TCL支持通过数组的形式存储多个元素。

 

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

一、数组的定义和格式

1.数组索引是由圆括号()来指定的,每个数组元素变量名的格式是“数组名(索引值)”。数组元素使用 set 命令来定义和赋值:

[语法]:set arrName(index) value

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

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

这个命令在定义数组的同时可以定义其元素和元素值。需要注意元素索引(index-n)与元素 值(valun-n)要成对输入,否则会出错。用命令 array set arrName “”可以定义一个空数组

3.用普通变量值的获取方法——替换操作来获取数组元素值:

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

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

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

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

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

可以使用 unset 命令来取消一个数组变量定义。

>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

二、数组变量

可以象使用普通变量一样来使用数组变量元素。如使用 info exist 来检测它是否存在,使用 incr 来递增它的值,使用 lappend 列表操作来追加列表元素等。

>set arr(1) 10

>incr arr(1)

=>11

将一个已经定义的普通变量当作数组变量使用或者将已定义的数组变量当作普通变量赋值是 错误的:

>set arr 10 ;#定义了一个普通变量

=>10

>set arr(a) 5 ;#试图将普通变量当作数组使用时出错

=> can't set "arr(a)": variable isn't array

>unset arr ;#取消变量定义

>set arr(a) 5 ;#ok

=> 5

>set arr 10 ;#试图赋值给数组变量时出错

=> can't set "arr": variable is array

可以使用替换获得数组名,通过替换间接使用数组变量

>set name Arr

=> Arr %set ${name}(1) abc

=> abc

>puts $Arr(1)

=> abc

三、多维数组

在有些时候,可能需要象 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

     arr(00) = 100

四、数组操作命令

数组就象字符串和列表一样,也有一套专门的操作命令。下图给出了这些命令的语法和说明。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/615080.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从理论上理解SQL注入、XSS、中间件解析漏洞、挖矿马

目录 1、SQL注入 (1)原理 (2)分类 (3)防御 2、XSS (1)原理 (2)分类 3、中间件(解析漏洞) (1)IIS6.X …

JDK安装教程

jdk 链接:https://pan.baidu.com/s/1xAFaR7AQdy_hPVFHc1CVnA 提取码:cypz 环境配置 1、我的电脑–》右键属性–》高级系统设置–》环境变量 2、系统变量–》新建系统变量–》完成后点击确定 变量名:JAVA_HOME 变量值:&#xff0…

chatgpt赋能python:Python中的分词技术及其应用

Python中的分词技术及其应用 什么是分词? 分词是自然语言处理(Natural Language Processing,NLP)中的一个重要环节,指将一段文本切分成若干个单词或词组。在中文分词中,由于中文没有明显的词汇边界&#…

进入IT领域,多久能月入过万?

当下打拼的很多人都有这样的困惑:刚毕业或者工作时间不长,也有一些基本技能,对未来有美好憧憬,一身干劲,却拿着微薄的薪水过着捉襟见肘的生活。 有些同龄人进入IT领域后快速升职加薪,观望者经常会问&#…

C++设计模式之生成器模式(Builder)

文章目录 定义前言1. 问题2. 解决方案 结构适用场景实现方法优点缺点与其他模式的关系实例 定义 生成器是一种创建型设计模式,使你能够分步骤创建复杂对象。该模式允许你使用相同的创建 代码生成不同类型和形式的对象。 前言 1. 问题 假设有这样一个复杂对象&a…

100种思维模型之事物关系思维模型-72

具体的事物是形象的、容易观察和理解的,而事物间的关系则容易让人忽视,乃至无法意识到它正在发生作用。 生活中,我们习惯于低估事物关系的影响。 事物关系思维模型一个提醒我们关注事物关系、从宏观层面找到更好的工作方向、实现可持续发展的…

显示反馈与隐式反馈

文章目录 1. 数据分类2. 显性反馈数据模型评价方法:3. 显式反馈转换为隐式反馈4. 隐式反馈的作用5. 参考资料 本文来介绍一下显示反馈与隐式反馈,作为我学习推荐系统的笔记以便日后忘记了可以回过头来温习。 1. 数据分类 显式反馈是指:用户明…

光量子计算机+GPU!NVIDIA、Rolls-Royce和Classiq宣布取得技术突破

​ (图片来源:网络) 5月21日,英伟达(NVIDIA)、罗尔斯罗伊斯(Rolls-Royce)和以色列量子软件公司Classiq宣布了一项量子计算技术突破成果,旨在不断提高喷气发动机的效率。 …

AB32VG:(2)app.cbp工程源码阅读笔记(ADC按键和红外)

文章目录 1.SDK文件目录2.ADCKEY和红外遥控器相关源码2.1 初始化2.2 在定时器中断服务程序中查询按键 3. 更改参数以适应自己的ADC按键板3.1 我的ADC按键板硬件3.2 ADC值转换为键值 4.红外遥控器5. 相关配置 参考文章: 作者:nunu1010,中科蓝…

VSCode+Git+TortoiseGit+Tools

目录 一、Tools 1、VSCode(visual studio code)下载安装 VSCode使用技巧和经验 2、Git下载安装 3、TortoiseGit 简介 3.1、下载安装Git及Tortoisegit 3.2、Tortoisegit拉取gitee仓库到本地 3.3、Git拉取gitee仓库到本地 3.4、Git提交到gitee仓库 4、国内获取GitHub链…

华为OD机试真题B卷 Java 实现【蛇形矩阵】,附详细解题思路

一、题目描述 蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。 例如,当输入5时,应该输出的三角形为: 1 3 6 10 15 2 5 9 14 4 8 13 7 12 11 二、输入描述 输入正整数N(N不大于100)。 三、输出描述…

Vector DDFS

矢量数字频率生成器 版本:vivado2021.1 帮助文档:C:/Xilinx/Vivado/2021.1/doc/sysgen/html_help/vectorddfs.html 接口 I 频率控制字,I 输出频率 * 采样时间 * 2^(频率分辨率);VI、VO 用于同步&#x…

什么是优雅的代码设计

今天我来解释一下什么样的代码才是优雅的代码设计。当然我们的代码根据实际的应用场景也分了很多维度,有偏向于底层系统的,有偏向于中间件的,也有偏向上层业务的,还有偏向于前端展示的。今天我主要来跟大家分析一下我对于业务代码…

电子科技大学计算机系统结构:课后作业

计算机体系结构作业答案 第一二章作业 1.试述Flynn 分类的4 种计算机系统结构有何特点。 参考答案: Flynn按照指令流和数据流两种不同的组合,把计算机系统的结构分为以下4 类: (1)单指令流单数据流SISD&#xff0…

这款AI绘画工具也太太太赞了!模型丰富,轻松绘画,赶快收藏起来!

现今科技发展迅速,让人工智能(AI)成为了我们日常生活中的必备之物。在艺术领域,AI技术也开始广泛应用。特别是AI绘画软件,以其高效、精准的绘画方式,已成为越来越多艺术家、设计师和普通用户绘画的首选工具…

HUSTOJ使用指南

如何快速上手(了解系统的功能)? admin管理员用户登录,点击右上角管理,仔细阅读管理首页的说明。 切记:题目导入后一次只能删一题,不要导入过多你暂时用不上的题目,正确的方式是每次…

Cron在前端的使用,vue与element ui的vue-cron插件的使用及将定时任务cron表达式解析成中文

文章目录 vue-cron插件的使用安装依赖引用Vue页面去掉秒和年定时任务cron解析成中文该插件存在的一个缺陷 vue-cron插件的使用 安装依赖 执行下面npm命令: npm install vue-cron --save 引用 在想使用cron的vue页面引入以下: import VueCron from ‘vue-cron’ …

node版本管理工具nvm安装和使用

公司的前端项目使用的node版本是10.11.1比较老的版本,但是新开发的项目需要使用vue3viteelectron,需要使用较新的node版本 。综上决定研究研究nvm对node进行切换管理。有相同需求的朋友希望下面的文章可以帮助到你们。借鉴了一些博主的文章,在文章里也总…

重磅!Cloud Ace 在班加罗尔和孟买成立新的据点

Cloud Ace Cooperation(总部位于东京千代田区; Makoto Aoki,总裁)很高兴地宣布,我们已经在班加罗尔建立了新的开发中心,并在孟买建立了新的销售办事处,作为 Cloud Ace 进一步扩大公司在印度业务…

docker-compose通过volume恢复mysql数据

概述 docker rm是docker删除容器的命令。 会清空容器内的所有数据和配置,即真正的将容器清空并删除。 但是之前通过volume挂载到宿主机上是不受影响的。 docker rm -v如果是-v的命令那么会同时删除通过volume映射到宿主机上的文件 通过volume恢复数据 使用docke…