Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.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,比如说,我在Tcl中有一个数组 set count(a) b set count(b) b set count(c) b set count(e) b set count(d) b set count(z) b set count(m) b 当我打印这个时,我得到了输出 array names count d m e a z b c 有没有一种方法可以获得与我编写数组相同的顺序?基于您不能这样做 数组键未排序。从数组中获取值的顺序与设置值的顺序不一样。一种常见的替代方法是获取名称,然后对其

比如说,我在Tcl中有一个数组

set count(a) b
set count(b) b
set count(c) b
set count(e) b
set count(d) b
set count(z) b
set count(m) b
当我打印这个时,我得到了输出

array names count

d m e a z b c
有没有一种方法可以获得与我编写数组相同的顺序?

基于您不能这样做

数组键未排序。从数组中获取值的顺序与设置值的顺序不一样。一种常见的替代方法是获取名称,然后对其进行排序。相反,dict中的值是有序的

使用dict来代替基本相同的东西,只是另一种语法:

dict set count a b
dict set count b b
dict set count c b
dict set count e b
dict set count d b
dict set count z b
dict set count m b
以下内容按插入顺序打印键

% dict keys $count
a b c e d z m
如果希望同时使用这两种方法,请将其分配给字典,并在需要时使用

array unset countArray
array set countArray $count
在Tcl 8.5中添加了dict。虽然数组从不保留其元素的插入顺序,但即使在以后的赋值之后,dict元素也会保留原始插入顺序

字典和数组都实现为哈希表,并且在功能上有一些重叠。但是,数组主要是变量的容器,允许单独跟踪元素。字典是值的容器,可以与其他类型的数据交换。dict命令集成只能使用大小均匀的适当列表

文档:,

建议使用tcl8.5中的dict。不过,以下是使用阵列执行此操作的方法: 输出:
我已经删除了您的标记和对Perl的引用。我可以解释如何保持Perl散列元素有序,但这与Tcl应用程序无关,因为我也知道Perl。如果您可以用perl告诉我,那么我可以在TCL中转换它,除非您在PERLIn对比中不使用某些直接方法,dict中的值是有顺序的。这与我所期望的正好相反,从我的测试来看是这样的。到现在为止还没有注意到关键订单。如果订单是一个重要的问题,也许列表是更好的方式。很好!然而,你的酒吧程序应该更复杂一点。如所写,考虑IcC.FuoA的效果。
array set foo {}
set fooOrder [list]

trace variable foo w bar

proc bar {args} {
    global fooOrder
    lappend fooOrder [lindex $args 1]
}

set foo(a) 10
set foo(c) 20
set foo(b) 30

puts "Default behaviour..."
puts [parray foo]

puts "Maintaining the order..."
foreach key $fooOrder {
    puts "foo($key) = $foo($key)"
}
sharad@ss:~$ tclsh my.tcl
Default behaviour...
foo(a) = 10
foo(b) = 30
foo(c) = 20

Maintaining the order...
foo(a) = 10
foo(c) = 20
foo(b) = 30
sharad@ss:~$