C#在数组中查找类似字符串

时间:2018-07-02 06:36:07

标签: c# arrays sorting compare string-comparison

问题: 我有一个字符串数组,我试图找到与提供的字符串最接近的匹配项。我在下面做了一些尝试,还尝试了其他一些解决方案,例如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);

2 个答案:

答案 0 :(得分:1)

您可以尝试以下代码。

  

我已根据您的14 7 2018 创建了List<string>,并检查了stringToMatch的{​​{1}}中的字符串是否包含array中存在的每个字符串,如果是,则选择将该字符串放入strings

toMatch

答案 1 :(得分:-1)

对于您的实现,我已经拆分了stringToMatch,然后进行了匹配计数。

下面的代码将为您提供具有最大字符串匹配数的订单的订单列表。

CREATE TABLE [dbo].[Lookups] 
(
     [Id] [uniqueidentifier] NOT NULL,
     [Typ] [varchar](16) NOT NULL,
     [Name] [varchar](32) NOT NULL,
     [ChangedDate] [datetime] NULL,
     [ChangedName] [varchar](32) NULL,
     [CreatedDate] [datetime] NULL,
     [CreatedName] [varchar](32) NULL,

     CONSTRAINT [PK_dbo.Lookups]
         PRIMARY KEY CLUSTERED ([Id] ASC)
) ON [PRIMARY];

我使用了非常简单的字符串比较来进行验证。该算法可以根据确切要求而变化(例如匹配字符串的序列等)