如何解决在 Tcl 代码中,我可以在 foreach 中迭代列表时附加和排序列表吗
我在 tcl 中对列表进行了排序,并且正在使用 foreach 对其进行迭代 在迭代期间,我希望将一个项目附加到列表中,并确保该项目按排序顺序位于正确的位置。 像这样:
foreach item $mylist {
..
if { $sun == "shining" } {
set mylist [lsort [lappend mylist "newitem"]]
continue
}
..
}
它在 tcl 中是有效的吗?这在所有情况和情况下都能按预期工作吗?
解决方法
foreach
将在开始迭代之前扩展 $mylist
变量一次:
% set mylist {1 2 3 4 5}
1 2 3 4 5
% foreach item $mylist { puts $item; lappend mylist "$item$item" }
1
2
3
4
5
% set mylist
1 2 3 4 5 11 22 33 44 55
因此,这取决于您说“它是否按预期工作”时的期望
,正如 glenn 建议的那样,您可以使用 while
,其测试条件在列表的状态上表示(例如使用 llength
)。
set mylist {1 2 3 4 5}
while {[llength $mylist]} {
# consume first list element
set mylist [lassign $mylist item]
if {$item <= 5} {
lappend mylist $item$item
}
}
注意 lassign
对使用列表很有用。不用说,仍然说,您需要一些停止条件(例如,列表必须在某个时刻耗尽,或者您明确break
)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。