Надежность: Дедупликация строковых ключей внутри чистой функции

#solidity

Вопрос:

Я пытаюсь определить отображение для использования внутри функции в качестве средства быстрого определения того, существует ли ключ. Я понимаю, что мог бы также использовать массив и выполнить цикл, но, похоже, это может дорого обойтись. Но вы не можете создавать сопоставления динамически, и если я создаю переменную состояния для этой цели, то у меня возникает проблема очистки состояния между вызовами этой функции, что делает ее дорогостоящей.

Вот что я пытался сделать, какие-либо предложения по наиболее эффективному методу дедупликации набора строк внутри чистой функции?

 function dedupe(string[] memory keys) public pure returns(string[] memory) {
        string[] memory deduped;
        mapping(string=>bool) map;
        string memory ikey;
        for(uint i=0; i<keys.length; i  ) {
            ikey = keys[i];
            if (!map[ikey]) {
                map[ikey]=true;
                deduped.push(ikey);
            }
        }
        return deduped;
    }