TCL - 将多个变量设置为 0
TCL - set multiple variables to 0
我有很多计数变量(即:count1 count2 count3....)
set count1 0
set count2 0
set count3 0
在 TCL 中是否有更短的方法来设置所有 count1.....count100 0
而不是在单独的行中键入所有内容
即:设置 count1 [列表 ....]
如果你有这么多足够密切相关的变量,我建议改用数组,你可以用它来循环:
for {set i 0} {$i <= 100} {incr i} {
set count($i) 0
}
这样,如果您不需要计数,您可以随时取消设置数组并轻松快速地释放一些内存。
如果由于某种原因你不能使用数组代替普通变量,那么你仍然可以这样做:
for {set i 0} {$i <= 100} {incr i} {
set count$i 0
}
如果变量彼此之间没有太大关系并且变量也不多,您可以像这样使用 lassign
和 lrepeat
:
lassign [lrepeat 4 0] a b c d
在上面,lrepeat
将创建一个包含元素 0
4 次的列表。
I have many counts variable (ie: count1 count2 count3....)
不要,只需维护一个 Tcl 列表并按列表位置访问各种计数:
set count [list 0 0 0 0]; # This is your "multi-set"
lindex $count 0; # a.k.a. $count0 or [set count0]
lset count 0 5; # a.k.a. [set count0 5]
lindex $count 1; # a.k.a. $count1
lset count 1 10; # a.k.a. [set count1 10]
如果您仍想 "explode" 将您的计数列表编码为一组专用变量,这是 Jerry 使用 lassign
的建议的通用变体,然后:
% set varNames [lmap idx [lsearch -all $count *] {string cat count $idx}]
count0 count1 count2 count3
% lassign $count {*}$varNames
% info vars count*
count count0 count1 count2 count3
set
命令returns加载到变量中的值。因此,当仅将几个变量初始化为 0 时,您可以这样做:
set count1 [set count2 [set count3 0]]
但是有 100 个变量是不实用的。
如果您有 100 个计数器,使用数组几乎肯定会容易得多。 Counter 听起来你会在变量上使用 incr
命令来计算一些东西。自 Tcl 8.5 起,变量(包括数组元素)无需初始化为 0 即可使 incr
正常工作。您可以只使用 incr count($x)
而无需任何事先初始化。
我有很多计数变量(即:count1 count2 count3....)
set count1 0
set count2 0
set count3 0
在 TCL 中是否有更短的方法来设置所有 count1.....count100 0
而不是在单独的行中键入所有内容即:设置 count1 [列表 ....]
如果你有这么多足够密切相关的变量,我建议改用数组,你可以用它来循环:
for {set i 0} {$i <= 100} {incr i} {
set count($i) 0
}
这样,如果您不需要计数,您可以随时取消设置数组并轻松快速地释放一些内存。
如果由于某种原因你不能使用数组代替普通变量,那么你仍然可以这样做:
for {set i 0} {$i <= 100} {incr i} {
set count$i 0
}
如果变量彼此之间没有太大关系并且变量也不多,您可以像这样使用 lassign
和 lrepeat
:
lassign [lrepeat 4 0] a b c d
在上面,lrepeat
将创建一个包含元素 0
4 次的列表。
I have many counts variable (ie: count1 count2 count3....)
不要,只需维护一个 Tcl 列表并按列表位置访问各种计数:
set count [list 0 0 0 0]; # This is your "multi-set"
lindex $count 0; # a.k.a. $count0 or [set count0]
lset count 0 5; # a.k.a. [set count0 5]
lindex $count 1; # a.k.a. $count1
lset count 1 10; # a.k.a. [set count1 10]
如果您仍想 "explode" 将您的计数列表编码为一组专用变量,这是 Jerry 使用 lassign
的建议的通用变体,然后:
% set varNames [lmap idx [lsearch -all $count *] {string cat count $idx}]
count0 count1 count2 count3
% lassign $count {*}$varNames
% info vars count*
count count0 count1 count2 count3
set
命令returns加载到变量中的值。因此,当仅将几个变量初始化为 0 时,您可以这样做:
set count1 [set count2 [set count3 0]]
但是有 100 个变量是不实用的。
如果您有 100 个计数器,使用数组几乎肯定会容易得多。 Counter 听起来你会在变量上使用 incr
命令来计算一些东西。自 Tcl 8.5 起,变量(包括数组元素)无需初始化为 0 即可使 incr
正常工作。您可以只使用 incr count($x)
而无需任何事先初始化。