微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Tcl 代码中,我可以在 foreach 中迭代列表时附加和排序列表吗

如何解决在 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 举报,一经查实,本站将立刻删除。