提问人:Lumpi 提问时间:12/12/2013 更新时间:12/13/2013 访问量:2464
当有值时,我可以在 tcl dict 中查找 upp 键吗?反向查找
Can I look upp a key in a tcl dict when having the value? Reverse lookup
问:
我有一个包含键及其值的 tcl 字典。有没有办法进行“反向查找”,例如查找值并检索密钥。 我知道这听起来不像是最先进的编程,但是字典已经存在于我的代码中,我不想仅仅因为这一次我需要它而以相反的方式重新创建它。
答:
4赞
Marco Pallante
12/12/2013
#1
您可以使用该命令。值可以重复,因此您应该期望有多个键。dict filter
set d [dict create a b c d e b]
# note that the "b" value is repeated for keys "a" and "e"
dict filter $d value b
-> a b e b
所以你可以使用这样的东西:
set lookupVal b
dict for {k v} [dict filter $d value $lookupVal] {
lappend keys $k
}
puts $keys
-> a e
评论
2赞
Johannes Kuhn
12/13/2013
用。dict keys [dict filter $d value $val]
0赞
Marco Pallante
12/13/2013
右!我只是在飞行中写了:)
2赞
Donal Fellows
12/13/2013
#2
如果你的值是唯一的,那么获取特定值密钥的肮脏方法如下:
set theKey [dict get [lreverse $theDict] $theValue]
我不会特别推荐它,因为它是一个类型破坏者,但它会做正确的事情。(如果多次获得相同的值,这将返回第一个实例的密钥。
请注意,如果这样做,您仍然会保留原始词典。(好吧,假设您在幕后类型转换发生时对 Tcl 的详细类型语义感到满意。$theDict
如果您偶尔考虑这样做,请考虑在原始词典旁边保留一个反转词典,以便您可以快速进行查找。即使您使用该解决方案,这也适用;否则,对任何大型物体进行线性扫描肯定会杀死您。dict keys [dict filter …]
评论