2017-01-21 14 views
0

私は、ある配列と別の配列との比較のヒントをほしいと思います。 配列の1つの要素が他の配列の要素と一致する場合は、puts文で0を返し、そうでない場合はputs文で1を返します。 インターネットで検索しようとしましたが、便利なものは見つかりませんでした。TCL ns2の配列比較

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; 
     } 

} 

このコードでは、出力は他の配列の値と一致しない値を示しています。 しかし、文字列や文字列の比較を配列にしたくない場合は、一致する出力が一致する場合は他の配列との完全な配列の比較が必要です。次のように

+0

比較の詳細を追加してください。たとえば、サンプル出力を追加します。 – x01saa

+0

citrusColorをループするときに、どのfoodColor項目がチェックされているかを示すフラグを設定する必要があります。 foodColorをループし、フラグを持たない項目をチェックします。 –

答えて

0

array setの構文はarrayNameの1つ以上の要素の値を設定

array set arrayName list

、です。リストは配列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 
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 
}