Tcl 两个未设置的数组之间有什么区别

Tcl 两个未设置的数组之间有什么区别,tcl,Tcl,我们有两种方法可以取消设置数组中的元素:unset和array unset。有什么区别 这是我的密码: >cat /tmp/arr_unset.tcl proc parr {arr} { global arr1 foreach {str num} [array get $arr] { puts "$str:$num" } } array set arr1 {one 1 two 2 three 3} parr arr1 array unset ar

我们有两种方法可以取消设置数组中的元素:
unset
array unset
。有什么区别

这是我的密码:

>cat /tmp/arr_unset.tcl
proc parr {arr} {
    global arr1
    foreach {str num} [array get $arr] {
        puts "$str:$num"
    }
}

array set arr1 {one 1 two 2 three 3}
parr arr1

array unset arr1 two
parr arr1

unset arr1(one)
parr arr1
以下是跑步记录:

>tclsh /tmp/arr_unset.tcl
three:3
two:2
one:1
three:3
one:1
three:3
看起来它们是相同的,或者上面的代码没有显示差异?

来自:

数组未设置arrayName?模式

取消设置数组中与模式匹配的所有元素(使用字符串匹配的匹配规则)。如果arrayName不是数组变量的名称,或者数组中没有匹配的元素,则不会引发错误。如果pattern被省略并且arrayName是一个数组变量,那么该命令将取消设置整个数组。该命令始终返回空字符串

它删除与通配符模式匹配的所有条目(或所有条目,如果没有给定模式)<代码>取消设置删除特定条目

例如:

% array set foo {cat 1 dog 2 cow 3}
% parray foo
foo(cat) = 1
foo(cow) = 3
foo(dog) = 2
% array unset foo c*
% parray foo
foo(dog) = 2

注意:
unset
也可以删除整个数组;在数组中,
unset-ary
array-unset-ary
是等效的。(我对导致
array unset
的用例感到好奇,但那是在我的时代之前…)Tcl数组是散列。多维数组可以通过使用一些分隔符连接键来模拟。用例的一个例子是数组元素,例如:
userdata(user1,name)
。然后,要删除与user1相关的所有信息,可以使用
数组unset userdata user1,*