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

Here's a more step-by-step method:

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

You can get a list of all the keys in an array with array names.

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