在列表TCL中移动元素

在列表TCL中移动元素,tcl,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个元素时,我希望删除最后一个元素并添加新元素作为第一个元素(第一个问题) 感谢并抱歉我的英语不好:)要在列表的第一个位置添加新项目,同时

我用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个元素时,我希望删除最后一个元素并添加新元素作为第一个元素(第一个问题)


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

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

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
文件: , , , , ,

Tcl索引表达式的语法:

  • 基于零的整数索引数
  • end
    最后一个元素
  • end
    -N最后一个元素之前的第N个元素
  • end
    +N最后一个元素后的第N个元素(实际上,N应该是负数)
  • M-N元素M之前的第N个元素
  • M+N元素M之后的第N个元素

表达式中不能有空格。

要在列表的第一个位置添加新项,同时将列表限制为给定大小,请执行以下操作:

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
文件: , , , , ,

Tcl索引表达式的语法:

  • 基于零的整数索引数
  • end
    最后一个元素
  • end
    -N最后一个元素之前的第N个元素
  • end
    +N最后一个元素后的第N个元素(实际上,N应该是负数)
  • M-N元素M之前的第N个元素
  • M+N元素M之后的第N个元素

表达式中不能有空格。

非常感谢!!!它的工作:)你是最好的!在这方面,Tcl的MichalOlder版本不支持索引的M±N语法;如果是那样的话,你必须用
expr
解决。非常感谢!!!它的工作:)你是最好的!在这方面,Tcl的MichalOlder版本不支持索引的M±N语法;在这种情况下,您必须使用
expr
进行计算。