首页 > 其他分享 >数组

数组

时间:2024-04-14 15:57:45浏览次数:28  
标签:School set 元素 arr 数组 array

1. 数组的定义与格式

数组索引是由圆括号()来指定的,每个数组元素变量名的格式是“数组名(索引值)”。数组元素使用 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

2. 数组变量 

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

示例:

  • set arr(1) 10

  • incr arr(1)

    •  => 11

可以使用替换获得数组名,如:

  • set name Arr

    •  => Arr

  • set ${name}(1) abc

    •  => abc

  • puts $Arr(1)

    •  => abc

3. 多维数组 

Tcl 并没有直接支持像C语言数组的格式,使用者自己可以定义所谓的多维数组,如: 

  • set arr(0, 0) 100

  • set arr(0, 1) 200

  • parray arr

    •  => arr(0, 0) = 100
    •        arr(0, 1) = 200

4. 数组操作命令 

数组操作命令表:

命令格式 说明
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 的所有元素变量名和元素值

4.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

4.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

4.3 遍历数组

如何对未知数组的每个元素进行操作呢,这可有多种方法。下面的例子提供了一个途径: 

  • array set a1 [list a AAA b BBB c CCC d DDD]

  • set l1 [array names a1]

    •  => d a b c

foreach id $l1 {

  puts "a1($id) = $a1($id)"

}

    •  => a1(d) = DDD

   a1(a) = AAA

   a1(b) = BBB

   a1(c) = CCC

array names 返回的元素索引的时候,最后一个元素的索引被放置到了列表的第一个位置上。 

4.4 用数组定义结构

Tcl 语言中没有结构类型,可以通过数组定义来实现相似的功能。 

  • array set Struct [list name_ "" type_ "" value_ ""]

  • parray Struct

  •  => Struct(name_) = 

           Struct(type_) = 

      Struct(value_) = 

标签:School,set,元素,arr,数组,array
From: https://www.cnblogs.com/love-9/p/18134223

相关文章

  • 数组2
    数组作为函数参数1,创建冒泡排序,对整型数组进行排序                               优化    对数组进行传参,传的是首元素地址2,数组名是首元素的地址例外:‘sizeof(数组名)’-数组名表示整个数组,计算的是数......
  • 2024-04-13:用go语言,给定一个整数数组 `nums`, 请编写一个函数,返回一个新的数组 `counts
    2024-04-13:用go语言,给定一个整数数组nums,请编写一个函数,返回一个新的数组counts。满足以下条件:对于每个nums[i],counts[i]表示在nums[i]右侧且比nums[i]小的元素数量。输入:nums=[5,2,6,1]。输出:[2,1,1,0]。答案2024-04-13:来自左程云。灵捷3.5大体过程如下:给定......
  • 通俗易懂的KMP理论讲解(含手求Next数组)
    通俗易懂的KMP理论讲解(含手求Next数组)1.KMP算法介绍KMP算法的核心是利用匹配失败后的信息,通过一个next数组,保存模式串中前后最长公共子序列的长度,尽量减少模式串与主串的匹配次数降低时间复杂度以达到快速匹配的目的。2.字符串的前后缀与公共前后缀2.1字符串的前缀字符串的......
  • 2019年蓝桥杯省赛-修改数组(并查集)
    0.题目时间限制:1.0s内存限制:256.0MB本题总分:20分【问题描述】给定一个长度为N的数组A=[A1,A2,···AN],数组中有可能有重复出现的整数。现在小明要按以下方法将其修改为没有重复整数的数组。小明会依次修改A2,A3,···,AN。当修改Ai时,小明会检查......
  • 二维字符串数组的传参时与指针互转时的问题
    二维数组如何传参二维字符串数组,转char**会导致的问题,以及编译报错要想得到正确的结果,需要按如下方式去写传参:#include<stdio.h>#include<string.h>//intchar_arr_copy(char**dest)//这样定义传参类型将导致编译报错,在低版本的编译器下或者没有报错但是得不到正确......
  • 数组搜索和位置方法总结(indexOf()、lastIndexOf()、includes()、find()、findIndex())
    1.严格相等(indexOf()、lastIndexOf()、includes())这三个方法都接受两个参数(要查找的元素、可选的起始搜索位置)indexOf()、includes()从数组第一项往后搜索,lastIndexOf()从数组最后一项往前开始搜索indexOf与lastIndexOf返回要查找的元素在数组中的位置,如果没有找到返回-1,incoude......
  • C语言09-指针(指针数组、数组指针、字符指针),值传递和引用传递,指针和函数,注释写法
    第12章指针pointer12.3指针和数组①数组名可以把数组名当做是存储了首元素地址的常量。//arr的类型表示为int[5]intarr[5]={10,20,30,40,50};②指针数组指针数组(PointerArray)是一个数组,其中的每个元素都是指针。intnum1=10,num2=20,num3=30;//ptr_......
  • Java创建数组、赋值的四种方式,声明+创建+初始化 详解
    Java创建数组、赋值的四种方式,声明+创建+初始化详解@目录一、创建数组的四种方式二、详解三、数组存储的弊端一、创建数组的四种方式以int数据类型为例@TestpublicvoidtestNewArray(){//创建数组//法一int[]arr1=newint[]{1,2,3,4,5};System.ou......
  • Java中Array.sort()的几种用法简明教程 (需要初始化要排序的对象)对 一个数组的所有元素
    Java中Array.sort()的几种用法简明教程(需要初始化要排序的对象)对一个数组的所有元素进行排序,并且是按从小到大的顺序Java中Array.sort()的几种用法简明教程(需要初始化要排序的对象)======================================================1、Arrays.sort(int[]a)......
  • 超详细!详解一道高频算法题:数组中的第 K 个最大元素
    超详细!详解一道高频算法题:数组中的第K个最大元素今天分享的题目来源于LeetCode第215号问题,是面试中的高频考题。题目描述在未排序的数组中找到第k个最大的元素。请注意,你需要找的是数组排序后的第k个最大的元素,而不是第k个不同的元素。......