您好我有map<char,int>
这样的地图,我希望进行反向查找,即从值中找到一个键。
Dafny有没有办法做到这一点(例如map.getKey(value)
)尚未记录?
我认为一种解决方案可能是反转地图,以便我可以将map<char,int>
反转为map<int,char
,然后在反转的地图上使用常规查找。我不知道如何做到这一点,但尝试使用地图理解map table[i] | i in table :: i
,但这不起作用。
请帮帮我。
答案 0 :(得分:1)
您可以使用“let that-that”语句来执行此操作。例如:
method Test(m: map<char,int>, val: int)
requires exists i :: i in m && m[i] == val;
{
var i :| i in m && m[i] == val;
// now use i...
}
您也可以按如下方式反转地图(但您不需要只进行一次反向查找)
function method InvertMap(m: map<char,int>): map<int,char>
{
map b | b in m.Values :: var a :| a in m && m[a] == b; a
}