Вопрос:
У меня есть массив строк, и я пытаюсь найти наиболее близкое соответствие с указанной строкой. Ниже я сделал несколько попыток, а также проверил некоторые другие решения, такие как расстояние Левенштейна, которое, кажется, работает, только если все строки имеют одинаковые размеры.
Expetation:
Если бы я использовал «два лучше», так как строка соответствия будет соответствовать «Два лучше, чем один».
мысль:
Мне было интересно, было бы полезно вообще разбить строку stringToMatch, где есть пробелы, а затем посмотреть, найдена ли каждая из этих частей строки stringToMatch в текущей итерации массива (arrayOfStrings [i])?
// Test array and string to search
string[] arrayOfStrings = new string[] { "A hot potato", "Two are better than one", "Best of both worlds", "Curiosity killed the cat", "Devil's Advocate", "It takes two to tango", "a twofer" };
string stringToMatch = "two are better";
// Contains attempt
List<string> likeNames = new List<string>();
for (int i = 0; i < arrayOfStrings.Count(); i++)
{
if (arrayOfStrings[i].Contains(stringToMatch))
{
Console.WriteLine("Hit1");
likeNames.Add(arrayOfStrings[i]);
}
if (stringToMatch.Contains(arrayOfStrings[i]))
{
Console.WriteLine("Hit2");
likeNames.Add(arrayOfStrings[i]);
}
}
// StringComparison attempt
var matches = arrayOfStrings.Where(s => s.Equals(stringToMatch, StringComparison.InvariantCultureIgnoreCase)).ToList();
// Display matched array items
Console.WriteLine("List likeNames");
likeNames.ForEach(Console.WriteLine);
Console.WriteLine("\n");
Console.WriteLine("var matches");
matches.ForEach(Console.WriteLine);