我有一个按字母顺序排列的超过一千种不同加密货币的清单。问题在于,如果用户查询,例如“BTC”,他们将从列表中获得BTCA(Bitair),因为这是在比特币之前。或者,输入比特币会给你“AntiBitcoin”,因为它来自比特币之前。最初,这是因为我使用了.Contains()
这是不正确的,所以现在我转而使用Levenshtein进行清除。
我正在建立一个这样的简单循环:
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.");
}
但是我非常坚持我应该如何获得用户想要的正确项目。它似乎完全愚蠢,我正在尝试做什么,但我必须通过这个列表正确查询(另外,我已经手动输入,ouch)
答案 0 :(得分:1)
您可以在目标货币的Levenshtein距离上订购列表,然后选择最上面的一个:
var closestMatch = crypto.currencies
.OrderBy(s => Crypto.LevenshteinDistance(s, currency))
.First();