从列表不区分大小写中获取重复项

时间:2017-01-09 09:36:16

标签: c# linq string-comparison

List<string> testList = new List<string>();
testList.Add("A");
testList.Add("A");
testList.Add("C");
testList.Add("d");
testList.Add("D");

此查询区分大小写:

// Result: "A"
List<String> duplicates = testList.GroupBy(x => x)
                                  .Where(g => g.Count() > 1)
                                  .Select(g => g.Key)
                                  .ToList();

它如何看起来不区分大小写? (结果:&#34; A&#34;,&#34; d&#34;)

3 个答案:

答案 0 :(得分:10)

使用GroupBy重载实现,您可以在其中提供所需的比较器,例如StringComparer.OrdinalIgnoreCase

  var result = testList
    .GroupBy(item => item, StringComparer.OrdinalIgnoreCase)
    .Where(g => g.Count() > 1)
    .Select(g => g.Key)
    .ToList();

答案 1 :(得分:3)

替换

.GroupBy(x => x) 

.GroupBy(x => x.ToLower())

您将所有string元素转换为小写和组不区分大小写。

答案 2 :(得分:1)

var result = testList.GroupBy(x => x.ToLower())
                                  .Where(g => g.Count() > 1)
                                  .Select(g => g.Key)
                                  .ToList();