我想比较一个字符串和许多字符串。怎么在C#中完成?
答案 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);
}
}