Расстояние Левенштейна для списка тысяч подобных записей криптовалют

У меня есть список из более чем тысячи различных криптовалют в алфавитном порядке. Проблема здесь в том, что если пользователь запрашивает, скажем, "BTC", он получит BTCA (Bitair) из списка, поскольку THAT предшествует биткойну. Кроме того, ввод Bitcoin вместо этого даст вам "AntiBitcoin", так как это предшествует биткойну. Первоначально это произошло потому, что я использовал .Contains() что просто не правильно, так что теперь я переключился на Левенштейна для исключения.

Я настраиваю простой цикл, как это:

foreach (String s in crypto.currencies)
{
    if (Crypto.LevenshteinDistance(s,currency) <= (Stuck on the right way to do this now))
    {
        //foo
    }
    Console.WriteLine(s + " is not a match. Continuing.");
}

Но я очень застрял в том, как я должен на самом деле получить нужный предмет, который хочет пользователь. То, что я пытаюсь сделать, может показаться совершенно глупым, но крайне важно, чтобы я мог правильно запросить этот список (плюс, я набрал его вручную, ой)

1 ответ

Решение

Вы можете заказать список на расстоянии Левенштейна от целевой валюты и выбрать верхнюю:

var closestMatch = crypto.currencies
    .OrderBy(s => Crypto.LevenshteinDistance(s, currency))
    .First();
Другие вопросы по тегам