我想排序字符串列表。我有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) –