比较字符串与几个不同的字符串

时间:2010-01-15 07:11:58

标签: c# algorithm string

我想比较一个字符串和许多字符串。怎么在C#中完成?

7 个答案:

答案 0 :(得分:9)

如果您想检查字符串列表中是否包含字符串,可以使用Contains扩展名方法:

bool isStringContainedInList = 
    new[] { "string1", "string2", "string3" }.Contains("some string")

答案 1 :(得分:6)

我建议您查看此维基百科article,了解最常见的子字符串问题

我从本科生回忆一下找到最长公共子串的一种策略,你可以先找到一个稍短的子串,然后从那里扩展(并重复)。也就是说,如果“abcd”是一个共同的子串,那么“abc”也是如此,“ab”也是如此。

这有助于重复算法,您首先找到字符串中出现的所有2个字母对(我不打扰一个字母子字符串,因为对于大型数据集,它们将包括整个字母表)。然后再次迭代以查找所有3个字母的子串,依此类推......

答案 2 :(得分:4)

要将集合中的所有字符串相互比较以查找重复项,使用字典最有效:

string[] strings = { "Zaphod", "Trillian", "Zaphod", "Ford", "Arthur" };

var count = new Dictionary<string, int>();
foreach (string s in strings) {
  if (count.ContainsKey(s)) {
    count[s]++;
  } else {
    count.Add(s, 1);
  }
}
foreach (var item in count) {
  Console.WriteLine("{0} : {1}", item.Key, item.Value);
}

输出:

Zaphod : 2
Trillian : 1
Ford : 1
Arthur : 1

您也可以使用LINQ方法:

var count =
  strings
  .GroupBy(s => s)
  .Select(
    g => new { Key = g.First(), Value = g.Count() }
  );

答案 3 :(得分:0)

 string[] comparisonList = {"a", "b" "c"};
 from s in comparisonList where comparisonList.Contains("b") select s;

答案 4 :(得分:0)

如果您想进行比较,请使用String.Compare 如果要在列表中查找字符串,请使用与列表类型等效的包含/选择方法。

答案 5 :(得分:0)

我喜欢使用String.Compare()静态方法,因为它让你明白一切。这很重要,因为字符串比较可能因微妙的错误而臭名昭着。

例如:

// Populate with your strings
List<string> manyStrings = new List<string>();

string oneString="target string";

foreach(string current in manyStrings)
{
    // For a culture aware, safe comparison
    int compareResult=String.Compare(current,oneString,
                       StringComparison.CurrentCulture);
    // OR
    // For a higher performance comparison
    int compareResult=String.Compare(current,oneString,
                       StringComparison.Ordinal);

    if (compareResult==0) 
    {
        // Strings are equal 

    }
}

如果你真的想知道一个字符串是否是另一个更大字符串的子字符串,在上面的循环中你可以使用:

int indexPos=current.IndexOf(oneString,StringComparison.Ordinal); 

if (indexPos>=0)
{
    // oneString was found in current
}

请注意,IndexOf接受相同的有用StringComparison枚举。

答案 6 :(得分:0)

要查找列表中多次出现在列表中的字符串,您可以开始将这些字符串放入HashSet中,并检查每个字符串是否已存在于此集合中。

例如,您可以:

HashSet<string> hashSet = new HashSet<string>();

foreach (string item in myList)
{
    if (hashSet.Contains(item)) 
    {
        // already in the list
        ...
    }
    else
    {
        // not seen yet, putting it into the hash set
        hashSet.Add(item);
    }
}