从TCL列表中提取每个第n个元素

时间:2018-01-26 21:51:40

标签: list tcl stride

我们可以通过foreach循环提取TCL列表的每个第n个元素。但是有一个单行通用TCL cmd可以做到这一点吗?像lindex这样的东西,带有'-stride'选项。

2 个答案:

答案 0 :(得分:2)

如果你有lmap(下面链接中的Tcl 8.5版本),你可以这样做:

lmap [lrepeat $n a] $list {set a}

示例:

set list {a b c d e f g h i j k l}
set n 2
lmap [lrepeat $n a] $list {set a}
# => b d f h j l

但是您的评论似乎表明您确实需要 n + 1 值。在那种情况下:

lmap [lreplace [lrepeat $n b] 0 0 a] $list {set a}
# => a c e g i k

文档: listlmap (for Tcl 8.5)lmaplrepeatlreplaceset

答案 1 :(得分:1)

不,但你可以写一个像:

这样的过程
each_nth {a b c d e f g h i j k l} 3    ;# => c f i l
each_nth {a b c d e f g h i j k l} 4    ;# => d h l
each_nth {a b c d e f g h i j k l} 5    ;# => e j

然后:

{{1}}