在Perl /
Ruby中,可以移动一个数组(类似于Tcl的列表),因此删除数组中的第一个项目并返回它.它的运行时间几乎不变.即,2个元素和200万个元素相同.
有没有类似于Tcl的东西?在某种程度上,它与Tcl的lappend项目相反.我们不是从顶部添加1,而是从底部删除一些东西.
代码应该如下所示:
有没有类似于Tcl的东西?在某种程度上,它与Tcl的lappend项目相反.我们不是从顶部添加1,而是从底部删除一些东西.
代码应该如下所示:
set k [ list 1 2 3 ] puts [ shift k ] > 1 puts [join $k ","] > 2,3
我当然可以在proc中执行此操作:
proc shift {list_name} { upvar $list_name listy set ret [lindex $listy 0] set listy [lrange $listy 1 end ] return $ret }
我想知道是否有更好的方法.
解决方法
(如我的评论所述)
tclers wiki中有一个page about lshift.根据Tcl gems页面,与你的版本相比,lreplace的使用表现更好.
proc lshift listVar { upvar 1 $listVar l set r [lindex $l 0] set l [lreplace $l [set l 0] 0] return $r }