我想排序字符串列表。我有1000个地址(一些用空格分隔的自定义地址数据)。第二件事是我的搜索查询。现在我想要获取所有的单词标记(不包括数字)并按最小的距离对它们进行排序。按距离最小的标记排序列表
例如
string query = "123 HAM";
// 1. get only "HAM" token
// 2. count distances
// 3. sort by them
//distance("HAM", "12 HAM DRIVE") -> 0
//distance("HAM", "13 HAM DRIVE") -> 0
//distance("HAM", "14 HAMER DRIVE") -> 2
//distance("HAM", "37 HAMMERSMITH AVENUE") -> 8
如果我的查询令牌HAM
,然后HAM
和HAM
之间的距离是0,HAM
和HAMER
之间是2(因为HAMER
有2个字母以上)等
我得到 '字' 令牌:
private static IEnumerable<string> GetLetterTokens(string location)
{
string[] words = location.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries);
return words.Where(word => Regex.IsMatch(word.Trim(), @"^[a-zA-Z]+$"));
}
现在对于每个地址我想要计算这些距离并按它们排序。有没有快速的方法来做到这一点?我的意思是使用List<>.Sort
。
THX的建议:)
指定距离,我只能看到字符串。 '“123 HAM”'表示_“HAM”_的距离是“123 whatever”? –
我的距离是查询令牌与地址字符串中包含该令牌的单词之间的字母差异。如果我的查询令牌是“HAM”,那么HAM和HAM之间的距离= 0,HAM和HAMER之间的距离= 2(因为HAMER有2个字母以上)等。 我的查询可以包含许多不同的单词,但我需要为了只得到单词(没有数字),那么我需要从查询中找到包含令牌的单词(如果令牌是“HAM”,那么所有匹配“HAM”的单词匹配),那么我需要计算距离并进行排序他们:)有点奇怪,但它应该看起来像这样。 – Nickon
我认为你可以使用[Levenshtein Distance](http://www.dotnetperls.com/levenshtein) –