将键值列表分配给Tcl中的数组

Jon*_*lla 2 tcl

我有一个列表是一个键值配对列表.像下面这样的东西

key1 value1 key2 value2 key3 value3
Run Code Online (Sandbox Code Playgroud)

我想将其映射到数组或字典.

目前,我的代码看起来像这样

for {set i 0} {$i < [llength $list]} {incr i} {
  if {[expr {fmod($i,2)}] == 0} {
    set key [lindex $list $i]
  } else {
    set v_array(${key}) [lindex $list $i]
  }
}
Run Code Online (Sandbox Code Playgroud)

在perl中,我知道这可以在一次传递中分配到键值字典中.在Tcl中有这么简单的方法吗?

Jer*_*rry 6

您可以在一行中创建一个数组(我使用一行来定义列表):

% set list [list key1 value1 key2 value2 key3 value3]
key1 value1 key2 value2 key3 value3
% array set v_array $list
Run Code Online (Sandbox Code Playgroud)

如果要检查内容,可以使用parray(Tcl 8.5及更高版本):

% parray v_array
v_array(key1) = value1
v_array(key2) = value2
v_array(key3) = value3
Run Code Online (Sandbox Code Playgroud)

其他数组命令的文档可以在这里找到,每个都有示例.


如果你以某种方式无法避免循环,那么使用foreach将更容易(确保列表具有偶数个元素):

foreach {a b} $list {
  set v_array($a) $b
}
Run Code Online (Sandbox Code Playgroud)

(这里一次foreach$list两个元素并将它们分配给a和b)