Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public static string ClosestEntry(this IList<string> list, string toMatch)
- {
- string outStr = String.Empty;
- outStr = list.Aggregate((c, d) => c.LevenshteinDistance(toMatch) < d.LevenshteinDistance(toMatch) ? c : d);
- return outStr;
- }
- public static IList<string> SortedByFamiliarity(this IList<string> list, string toMatch)
- {
- var outList = new List<string>();
- outList = list.OrderBy(x => LevenshteinDistance(x, toMatch)).ToList();
- return outList;
- }
- public static int LevenshteinDistance(this string source, string target)
- {
- if (String.IsNullOrEmpty(source))
- {
- if (String.IsNullOrEmpty(target)) return 0;
- return target.Length;
- }
- if (String.IsNullOrEmpty(target)) return source.Length;
- if (source.Length > target.Length)
- {
- var temp = target;
- target = source;
- source = temp;
- }
- var m = target.Length;
- var n = source.Length;
- var distance = new int[2, m + 1];
- // Initialize the distance 'matrix'
- for (var j = 1; j <= m; j++) distance[0, j] = j;
- var currentRow = 0;
- for (var i = 1; i <= n; ++i)
- {
- currentRow = i & 1;
- distance[currentRow, 0] = i;
- var previousRow = currentRow ^ 1;
- for (var j = 1; j <= m; j++)
- {
- var cost = (target[j - 1] == source[i - 1] ? 0 : 1);
- distance[currentRow, j] = Math.Min(Math.Min(
- distance[previousRow, j] + 1,
- distance[currentRow, j - 1] + 1),
- distance[previousRow, j - 1] + cost);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement