移动列表TCL中的元素

时间:2016-08-16 06:35:47

标签: tcl

我的TCL语言脚本存在两个问题。 第一: 我创建了从图表中下载值的列表,但我不知道如何在列表中移动元素,例如:

set list [2,3,4,5,6] # my list

我想要这个效果 - >

[1,2,3,4,5] next -> [0,1,2,3,4] etc.

第二: 如何为10个元素创建固定大小的列表?我想要列表中的10个元素,当我得到> 10个元素我想删除最后一个元素并添加new作为第一个元素(第一个问题)

谢谢并抱歉我的英语不好:)

1 个答案:

答案 0 :(得分:2)

在列表的第一个位置添加新项目,同时将列表限制为给定大小:

set size 5
set list [list 2 3 4 5 6]
# => 2 3 4 5 6
set list [lrange [linsert $list 0 1] 0 $size-1]
# => 1 2 3 4 5
set list [lrange [linsert $list 0 0] 0 $size-1]
# => 0 1 2 3 4

您可以使用以下过程简化此操作:

proc move {varName new} {
    upvar 1 $varName list
    set size 5
    set list [lrange [linsert $list 0 $new] 0 $size-1]
}

set list [list 2 3 4 5 6]
# => 2 3 4 5 6
move list 1
# => 1 2 3 4 5
move list 0
# => 0 1 2 3 4

文档: linsertlistlrangeprocsetupvar

Tcl索引表达式的语法:

  • 整数从零开始的索引号
  • end最后一个元素
  • end -N 最后一个元素之前的 n 元素
  • end + N 最后一个元素之后的 n 元素(实际上, N 应为负数)
  • M-N 元素 m 之前的 n 元素
  • M + N 元素 m 之后的 n 元素

表达式中不能有空格。