我想获取列表的特定索引之后的所有元素。这可以写成:
set foo {0 1 2 3 4 5 6 <...> n}
puts [lrange $foo 1 [llength $foo]]
然而,计算列表长度似乎是浪费。如果lrange的最后一个参数是可选的并且省略它意味着继续直到列表的结尾,那将是很好的,但是,唉今天不是这样。
在没有计算列表长度的情况下,是否有其他方法可以在Tcl中有效地执行此操作?
答案 0 :(得分:7)
您可以使用“end”代替“[llength $ foo]”
因此...
把[lrange $ foo 1 end]
答案 1 :(得分:4)
但“实际上是一个引擎盖下的列表”,我的意思是解释器目前将其视为一个列表(有更深层次的解释,但不值得进入这里)。由于您在值上使用[lrange],解释器必须将其内部转换为列表...因此您几乎可以保证[llength]的O(1)行为。