c# - 确定字符串是否在字符串数组中出现多次 (C#)

标签 c# arrays string

我有一个字符串数组,例如

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/

相关文章:

C#异步IO : Is there a way of ensuring ordering of tasks?

arrays - OCaml 中的数组操作

Java - 如何在模板类的构造函数中初始化包含 T 类型项目的数组?

javascript - jQuery.each - 如何遍历 JSON 对象元素?

c# - 在 XML 中保存 ImageSource (BitmapSource)

c# - 如何将 Xamarin.Forms 与 Xamarin.Auth 结合使用来存储和检索帐户对象

java - 用java分割字符串不起作用

javascript - 如何在javascript中的字符串中的每个新行添加 '>'?

python - 在 randint 参数中使用变量

c# - 在 MVC 5 中正确设置 DropDownListFor