Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将键值列表分配给Tcl中的数组_Tcl - Fatal编程技术网

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

将键值列表分配给Tcl中的数组,tcl,Tcl,我有一个列表,它是一个键值配对列表。类似于下面的内容 key1 value1 key2 value2 key3 value3 我想将其映射到数组或字典 目前,我的代码如下所示 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 $li

我有一个列表,它是一个键值配对列表。类似于下面的内容

key1 value1 key2 value2 key3 value3
我想将其映射到数组或字典

目前,我的代码如下所示

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]
  }
}
对于{set i 0}{$i<[llength$list]}{incr i}{
如果{[expr{fmod($i,2)}]==0}{
设置键[lindex$list$i]
}否则{
设置v_数组(${key})[lindex$list$i]
}
}

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

您可以使用
dict
命令在
Tcl
中创建/操作词典

% set mydict [dict create key1 value1 key2 value2 key3 value3]
key1 value1 key2 value2 key3 value3
% dict get $mydict
key1 value1 key2 value2 key3 value3
% dict get $mydict key3
value3
% dict get $mydict key1
value1
%
即使没有
dict create
命令,您也可以直接从列表中获取/访问键和值,只要它是键值形式。i、 e.偶数个元素

比如说,

% set mylist {key1 value1 key2 value2 key3 value3}
key1 value1 key2 value2 key3 value3
% dict get $mylist key2
value2
正如您所注意到的,我在这里没有使用
dict create
命令,但仍然能够访问字典项


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

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

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


如果无法避免循环,那么使用将更容易(确保列表中的元素数为偶数):

(此处,
foreach
一次取两个
$list
中的元素,并将它们分配给a和b)

最简单的解决方案:

set mylist {key1 value1 key2 value2 key3 value3}
array set arr $mylist
就这样

现在,做一个鹦鹉学舌检查

档案:t3

#
set list [list key1 value1 key2 value2 key3 value3]
array set arr $list
parray arr
#

Execute the file: tclsh t3
arr(key1) = value1
arr(key2) = value2
arr(key3) = value3

谢谢,那看起来像是我要找的。
foreach {a b} $list {
  set v_array($a) $b
}
set mylist {key1 value1 key2 value2 key3 value3}
array set arr $mylist
#
set list [list key1 value1 key2 value2 key3 value3]
array set arr $list
parray arr
#

Execute the file: tclsh t3
arr(key1) = value1
arr(key2) = value2
arr(key3) = value3