文字列のリストをソートしたい。1000 個のアドレスがあります (スペースで区切られたカスタム アドレス データ)。2 つ目は検索クエリです。ここで、すべての単語トークン (数字なし) を取得し、最小距離で並べ替えたいと思います。
例えば
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
の場合、 と の間の距離は 0、 と の間HAM
の距離は 2 ( 2 文字以上あるため) などです。HAM
HAM
HAMER
HAMER
「単語」トークンを取得します。
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 :)