我有一个列表是一个键值配对列表.像下面这样的东西
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中有这么简单的方法吗?
您可以在一行中创建一个数组(我使用一行来定义列表):
% 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)