定义和循环数组tcl

Mic*_*eal 6 tcl

我需要一些帮助来定义数组,并在TCL中显示和循环它们.

这是我将如何在PHP中执行它们.

$date =array();
$size=0;
$date[$size] =$pre_event_date;
/* After doing some manpulation and calculations with $size */
for($i=0;$i<=$size;$i++){
    echo $date[$i];
}
Run Code Online (Sandbox Code Playgroud)

我想对tcl执行相同的操作.以下代码是否合适?

set size 0
set date[$size] $pre_event_date
#After performing some manipulation
for {set i 0} { $i <=$size } {incr i} {
    puts "$date[$i]";
}
Run Code Online (Sandbox Code Playgroud)

我也可以将set $ date定义为数组.有些人喜欢:

set date array();
Run Code Online (Sandbox Code Playgroud)

所以我编辑了我的代码尝试使用RSeeger的数组实现的简单测试:

set date(0) 35
set date(1)  40
foreach key [array names date]{
   puts "${key}=$date($key)"
}
Run Code Online (Sandbox Code Playgroud)

上面没有返回任何可能有一些错误.我也试过:把$ date($ key)放在没有引号的情况下,但这也不起作用.

RHS*_*ger 8

如果您希望按编号(代码所暗示的)索引内容,请使用a list.它类似于C中的数组.

set mylist {}
lappend mylist a
lappend mylist b
lappend mylist c
lappend mylist d
foreach elem $mylist {
    puts $elem
}
// or if you really want to use for
for {set i 0} {$i < [length $mylist]} {incr i} {
    puts "${i}=[lindex $mylist $i]"
}
Run Code Online (Sandbox Code Playgroud)

如果要按字符串索引(或具有稀疏列表),可以使用an array,它是key-> value的hashmap.

set myarr(chicken) animal
set myarr(cows) animal
set myarr(rock) mineral
set myarr(pea) vegetable

foreach key [array names myarr] {
    puts "${key}=$myarr($key)"
}
Run Code Online (Sandbox Code Playgroud)


Edu*_*Edu 6

在Tcl中,数组概念与许多其他编程语言不同,Tcl调用数组通常在其他地方称为哈希映射或关联数组.数组索引不限于整数,但可以是任何合法字符串.大多数时候,我发现自己使用列表(或列表列表)而不是数组来进行数据操作.要循环遍历整个列表或数组,可以使用命令foreach.

foreach {index content} [array get date] {
    put $index: $content
}
Run Code Online (Sandbox Code Playgroud)

在设置数组之前,您不必初始化数组,只需开始添加成员即可.各个数组成员引用为

 $array($key) or $array("abc")
Run Code Online (Sandbox Code Playgroud)

例如,Tcl中没有多维数组,但可以通过具有一致的键名来模拟它们

set a(1,1) 0
set a(1,2) 1
...
Run Code Online (Sandbox Code Playgroud)

除此之外,我只想指出一些优秀的Tcl wiki以及它的语法问题的数组页面数组手册页,因为我没有看到重复大部分内容的重点.