嗨我有一个基本键值对的数组,我想对它进行排序然后获取键。数组内容如下:
arrVal {
123adf45ad ABCD.1
aldfhr435d ABCD.9
lkh45q9er4 ABCD
1234dartf4 ABCD4
}
所以基本上我的数组键是某种加密的id,值是字符串值。由于我无法根据其键对数组进行排序,我做了类似的事情:
foreach {key in array..} {
lappend mylist [$arrVal($key)];
}
set mylist [lsort $mylist];
现在对于排序列表我想根据这些值提取数组键。我找不到任何可以根据其值提取数组键的命令。有帮助吗?
答案 0 :(得分:3)
基本上你几乎就在那里。你想要的是一个反向映射,它不是内置于语言(或实际上是大多数语言)中的东西,而是一个概念:另一个数组,第一个数组的值作为第一个数组的键和键作为值:
array set reverseMap {}
foreach {key val} [array get arrayVal] {
set reverseMap($val) $key
}
现在你可以得到这样的键:
set secondKey $reverseMap([lindex $mylist 1])
答案 1 :(得分: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
答案 2 :(得分:0)
您可以使用array names获取数组中所有键的列表。
set mylist [lsort [array names arrVal]]