Дафни карта обратного просмотра - PullRequest
0 голосов
/ 12 мая 2018

Привет, у меня есть карта типа map<char,int>, и я хочу сделать обратный поиск, то есть найти ключ по значению.

Есть ли способ сделать это в Дафни (например, map.getKey(value)), который еще не был задокументирован?

Я думаю, что одним из решений могло бы быть инвертировать карту, чтобы я мог инвертировать map<char,int> в map<int,char, а затем использовать нормальный поиск на инвертированной карте. Я не уверен, как это сделать, но я пытался использовать map table[i] | i in table :: i по карте, но это не работает.

Пожалуйста, помогите мне.

1 Ответ

0 голосов
/ 12 мая 2018

Вы можете использовать для этого выражение «пусть такое-то». Например:

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
}
...