【发布时间】:2018-07-02 06:36:07
【问题描述】:
问题: 我有一个字符串数组,我正在尝试找到与提供的字符串最接近的匹配项。我在下面做了一些尝试,并检查了其他一些解决方案,例如 Levenshtein Distance,这似乎只有在所有字符串都具有相似大小的情况下才有效。
期望: 如果我使用“两个更好”作为匹配字符串,它将与“两个比一个更好”匹配。
想法: 我想知道是否在有空格的地方拆分 stringToMatch 字符串,然后查看在数组的当前迭代( arrayOfStrings[i] )中是否找到了 stringToMatch 字符串的每个部分是否会有所帮助?
// 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);
【问题讨论】:
-
所以你想要一个字符串距离算法,它可以很好地处理不同长度的字符串,并且可以帮助你更好地确定(或给出更接近的分数)其中一个是否是子字符串?...这是不太适合stackoverflow。有无数种不同的字符串距离算法出于不同的原因做许多不同的事情。也许您需要仔细研究他们每个人的工作并研究它们之间可用的比较。我之所以这么说是因为这里有很多期望的结果在您的问题中并不明显,而且确实无法回答跨度>
标签: c# arrays sorting compare string-comparison