【发布时间】:2018-09-11 17:51:10
【问题描述】:
我有一个按字母顺序排列的超过一千种不同加密货币的列表。如果用户查询“BTC”,那么问题就在这里,他们会将 BTCA(Bitair)从列表中删除,因为 BTCA 出现在比特币之前。或者,输入比特币会给你“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.");
}
但是我非常坚持我应该如何真正去获得用户想要的合适的项目。我正在尝试做的事情可能看起来完全愚蠢,但我必须正确地查询这个列表(另外,我是手动输入的,哎哟)
【问题讨论】:
-
我不确定您是如何显示结果的。但大多数搜索 UI 都是通过显示搜索词的前几个结果来工作的。为什么不显示包含给定搜索字符串的所有硬币而不是“单一最佳匹配”?更好的是,然后通过访问 coinmarketcap 或类似 API 按搜索结果的当前市值对这些结果进行排序。
-
我只需要显示一个。这就是问题:(
-
理想的 Levenshtein 距离为 0 以实现完美匹配。越接近0越好。如果这不能产生良好的匹配,您必须调整定义插入、删除等点数的权重。
标签: c# arrays levenshtein-distance querying