如何在Tcl中从列表中获取值?

5

I have a list in Tcl as:

set list1 {0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9}

那么如何根据列表的索引获取元素呢?例如:

我想获取此列表的第二个元素?或者第六个元素?


这是一个有趣的列表。除了最后一个元素外,所有元素都在末尾有逗号。也许你只想要没有逗号的列表元素。在Tcl中,列表元素只是由空格分隔,而不是逗号。 - Holger Jakobs
3个回答

9
只需要使用拆分和循环吗?
foreach n [split $list1 ","] {
    puts [string trim $n]  ;# Trim to remove the extra space after the comma
}

[split $list1 ","] 返回一个列表,包含以下元素 0x1 { 0x2} { 0x3} { 0x4} { 0x5} { 0x6} { 0x7} { 0x8} { 0x9}

foreach 循环遍历列表中的每个元素,并将当前元素赋值给变量 $n

[string trim $n] 去除字符串末尾的空格(如果有的话),并输出结果。


编辑:

要获取列表的第n个元素,请使用lindex函数:

% puts [lindex $list1 1]
0x2
% puts [lindex $list1 5]
0x6

索引是从0开始的,所以你需要从列表中取出的索引要减去1。

列表中有索引吗?我们能获取第二个元素吗?或者在这种情况下,我们应该使用数组吗? - user2131316
你所说的 foreach 针对的是一对值,还是针对数组或列表的一个值和一个索引? - user2131316
@user2131316 你到底想做什么?请相应地更新你的问题。这样会让人感到困惑 :( - Jerry

6

只需执行

lindex $list 2

您将获得

0x3

1
你应该使用lindex来实现。但是从你的问题中我感觉到你不想在提取的元素中包含“,”。你不需要用“,”来分隔列表,只需要空格即可。
> set list1 {0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9}
> 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9
> lindex $list1 3
> 0x4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接