TCL中的数组比较ns2

时间:2017-01-21 06:12:24

标签: tcl ns2

我想要一个代码/一些数组与另一个数组的比较提示。 如果数组的一个元素与另一个数组中的元素匹配,则使用puts语句返回0,否则返回一个带有一些puts语句的元素。 我尝试在互联网上搜索,但找不到任何有用的东西。

array set foodColor {
    Apple   red
    Banana  yellow
    Lemon   yellow
    Carrot  orange
}

array set citrusColor {
        Lemon   yellow
        Orange  orange
        Lime    green
}

# build up a list of non-citrus foods
foreach k [array names citrusColor] {
        if {![info exists foodColor($k)]} {  
              puts $k;
        }

}

在此代码中,输出显示与其他数组中的值不匹配的值。 但我不想在数组中进行字符或字符串比较,如果匹配显示输出匹配则不希望与其他数组进行完整的数组比较。

2 个答案:

答案 0 :(得分:0)

array set的语法如下,

<强> array set arrayName list

  

设置arrayName中一个或多个元素的值。列表必须有一个   像数组get返回的表单,由偶数组成   元素。列表中的每个奇数元素都被视为元素   arrayName中的名称,列表中的以下元素用作   该数组元素的新值。如果变量arrayName没有   已存在且列表为空,arrayName创建为空   数组值。

您应该收到以下错误

wrong # args: should be "array set arrayName list"

代码可以改写为,

array set food {
    Apple   red
    Banana  yellow
    Lemon   yellow
    Carrot  orange
}
array set citrus {
        Lemon   yellow
        Orange  orange
        Lime    green
}


foreach k [array names citrus] {
    if {[info exists food($k)]} {
        puts "The key '$k' is available in both arrays"
    }
}

输出

The key 'Lemon' is available in both arrays

答案 1 :(得分:0)

你想要这个吗?

if { [info exists citrusColor($key)] && 
     [info exists foodColor($key)] && 
     $citrusColor($key) eq $foodColor($key)
} {
    puts "Key $key is in both arrays with the same value"
    return 0
} else {
    puts "Key $key is either missing or has a different value"
    return 1
}