list - 是否有与 Perl 的转变等效的 Tcl?

标签 list perl tcl time-complexity

在 Perl/Ruby 中,可以移动一个数组(类似于 Tcl 的列表),从而删除数组中的第一项并返回它。它的运行时间几乎是恒定的。即,对于 2 个元素和 200 万个元素也是如此。 在 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
}

我想知道是否有更好的方法。

最佳答案

(正如我在评论中所说)

有一个page about lshift在 tclers 维基。根据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
}

关于list - 是否有与 Perl 的转变等效的 Tcl?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40717074/

相关文章:

perl - 测试::简单检查文件是否存在

list - 如何从tcl列表中删除空元素

python - 我正确使用pickle吗?-Python

python - 2 列上的 Array_agg 输出未被识别为列表

list - TCL中有类似std::set的数据结构吗?

sql-server - 从运行在 GNU/Linux 上的 Tcl 访问 Microsoft SQL Server

python - 线程和 tkinter

python - 如何在Python中从两个列表创建字典

python - python 正则表达式替换中的 if 语句

perl - 日志文件两行之间的时间差