我有一个字符串数组,例如
string [] letters = { "a", "a", "b", "c" };
我需要找到一种方法来确定数组中的任何字符串是否出现多次。 我认为最好的方法是创建一个没有相关字符串的新字符串数组并使用 Contains,
foreach (string letter in letters)
{
string [] otherLetters = //?
if (otherLetters.Contains(letter))
{
//etc.
}
}
但是我不知道怎么办。 如果有人对此有解决方案或更好的方法,请回答。
最佳答案
最简单的方法是使用 GroupBy
:
var lettersWithMultipleOccurences = letters.GroupBy(x => x)
.Where(g => g.Count() > 1)
.Select(g => g.Key);
这将首先使用字母作为键对您的数组进行分组。然后它只返回那些具有多个条目的组并返回这些组的键。结果,您将有一个 IEnumerable<string>
包含在原始数组中出现不止一次的所有字母。在您的示例中,这只是“a”。
注意:因为 LINQ 是使用延迟执行实现的,枚举 lettersWithMultipleOccurences
多次,会进行多次分组过滤。为避免这种情况,请调用 ToList()
关于结果:
var lettersWithMultipleOccurences = letters.GroupBy(x => x)
.Where(g => g.Count() > 1)
.Select(g => g.Key).
.ToList();
lettersWithMultipleOccurences
现在将是 List<string>
类型.
关于c# - 确定字符串是否在字符串数组中出现多次 (C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7318501/