2

こんにちは、基本的なキーと値のペアを持つ配列があり、それを並べ替えてからキーを取得したいと考えています。配列の内容は次のようなものです。

arrVal {
    123adf45ad    ABCD.1
    aldfhr435d    ABCD.9
    lkh45q9er4    ABCD
    1234dartf4    ABCD4
}

基本的に、私の配列キーはある種の暗号化された ID であり、値は文字列値です。キーに基づいて配列をソートできないため、次のようにしました。

foreach {key in array..} {
    lappend mylist [$arrVal($key)]; 
}
set mylist [lsort $mylist];

ソートされたリストについて、それらの値に対して配列キーを抽出したいと思います。値に基づいて配列キーを抽出できるコマンドが見つかりませんでした。何か助けはありますか?

4

3 に答える 3

3

基本的に、あなたはほとんどそこにいます。必要なのは、言語 (または実際にはほとんどの言語) に組み込まれているものではなく、概念であるリバース マップです。最初の配列の値をキーとして、最初の配列のキーを値として持つ別の配列です。

array set reverseMap {}
foreach {key val} [array get arrayVal] {
    set reverseMap($val) $key
}

これで、次のようにキーを取得できます。

set secondKey $reverseMap([lindex $mylist 1])
于 2013-01-03T18:00:20.937 に答える
1

より段階的な方法を次に示します。

array set arrVal {
    123adf45ad    ABCD.1
    aldfhr435d    ABCD.9
    lkh45q9er4    ABCD
    1234dartf4    ABCD4
}
set arrValList [list]
foreach {key val} [array get arrVal] {lappend arrValList [list $key $val]}
set sortedKeys [list]
foreach pair [lsort -index 1 $arrValList] {lappend sortedKeys [lindex $pair 0]}
puts $sortedKeys  ;# lkh45q9er4 123adf45ad aldfhr435d 1234dartf4
于 2013-01-03T21:22:55.133 に答える
0

配列名を持つ配列内のすべてのキーのリストを取得できます。

set mylist [lsort [array names arrVal]]
于 2013-01-03T18:34:44.337 に答える