定义和循环数组tcl

时间:2012-04-15 19:53:49

标签: 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];
}

我想对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]";
}

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

set date array();

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

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

以上并没有返回任何可能存在错误的内容。 我也尝试过: 将$ date($ key)放在没有引号的情况下,但这也不起作用。

3 个答案:

答案 0 :(得分:8)

如果您希望按编号(代码所暗示的)索引内容,请使用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]"
}

如果要按字符串索引(或者有稀疏列表),可以使用array,这是key-&gt;值的散列图。

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)"
}

答案 1 :(得分:6)

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

foreach {index content} [array get date] {
    put $index: $content
}

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

 $array($key) or $array("abc")

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

set a(1,1) 0
set a(1,2) 1
...

除此之外,我只会指出你最优秀的Tcl wiki,它是array pagearray man page的语法问题,因为我没有看到重复这些内容的大部分内容。

答案 2 :(得分:3)

TCL数组更接近Python调用的字典,以及Perl中的散列。 因此有必要将索引视为键串,而不是索引整数:

set groceries(fruit) "banana"
set groceries(1) "banana"

您可以使用array函数执行有用的操作,例如生成列表 所有密钥,如果需要,您可以遍历该列表。 例如,您可以生成密钥列表,然后使用llength来获取数组大小。

如果您需要唯一索引来查找它们,这种方法效果最佳。 如果您只需要一个有序列表 - 那么您可能最好使用lappend等实际列表函数。