7

I need some help in defining arrays and displaying and looping thrrough them in TCL.

Here is how I would do them in 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];
}

I would like to do the same with tcl.Is the following code appropriate?

set size 0
set date[$size] $pre_event_date
#After performing some manipulation
for {set i 0} { $i <=$size } {incr i} {
    puts "$date[$i]";
}

Also can I define set $date as an array. Some like like:

set date array();

So i edited my code tried a simple test using RSeeger's array implementation:

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

the above doesnt return anything there is probably some error. I also tried: puts $date($key) without quotes but that doesnt work either.

4

3 回答 3

9

如果您希望按数字(您的代码暗示)索引事物,请使用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]"
}

如果您想按字符串(或有一个稀疏列表)索引事物,您可以使用 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)"
}
于 2012-04-15T20:39:21.950 回答
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,它是用于语法问题的数组页面数组手册页,因为我认为在这里重复他们的大部分内容没有意义。

于 2012-04-15T20:22:06.550 回答
3

TCL 数组更接近 Python 所说的 dict 和 Perl 中的哈希。因此,将索引视为键字符串而不是索引整数会有所帮助:

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

您可以使用数组函数来做有用的事情,例如生成所有键的列表,如果需要,您可以遍历该列表。例如,您可以生成一个键列表,然后使用llength来获取数组大小。

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

于 2012-04-15T20:22:50.427 回答