2013-08-02 82 views
1

我有大量的字符串列表。我想知道列表是否包含任何正确重复5次的字符串。C#查找列表是否包含重复5次的项目

如果项目重复6次或更多,我不想知道。

我认为他们必须是一个更好的方法,而不是通过列表中的每一个字符串来计算多少个实例?

他们是一种简单的LINQ方式吗?

+2

“是他们的一个简单的LINQ的方式来做到这一点?”当然有,但并不比一一列出清单更“好”。 – dasblinkenlight

回答

4

没有什么比这更好performancewise,因为你显然需要遍历整个列表中至少做一次计数测试。然而,在LINQ中,你可以用更少的代码获得,这是事实。这样的事情应该做的伎俩:

var listOfFiveTimers = list.GroupBy(s => s) 
          .Where(g => g.Count() == 5) 
          .Select(g => g.Key) 
          .ToList(); 
2
stringListName.GroupBy(x => x).Any(x => x.Count() == 5); 

使用

var stringListName = new string[] { "a", "a", "a", "a", "a", "b" }; 
0
List<string> l = new List<string>(); 
    l.Add("a"); 
    l.Add("a"); 
    l.Add("a"); 
    l.Add("b"); 
    l.Add("b"); 
    l.Add("b"); 
    l.Add("b"); 
    l.Add("b"); 
    l.Add("c"); 
    l.Add("c"); 
    l.Add("c"); 
    l.Add("c"); 
    l.Add("c"); 
    l.Add("c"); 

    l.GroupBy 
    (
     x => x 
    ) 
    .Select 
    (
     x => 
     new 
     { 
      x.Key, 
      count = x.Count() 
     } 
    ) 
    .Where 
    (
     x => x.count==5 
    ); 
1
bool duplicated5times = list.GroupBy(x=>x).Any(x=>x.Count() == 5); 
0

这不是漂亮,但是这将做到这

static void Main(string[] args) 
{ 
    var items = new[] {1, 1, 1, 1, 1, 3, 2, 1, 5, 2}; 

    var over = items.Distinct().ToList().Where(i=>items.Where(it => it == i).Count() > 5); 
    Console.Read(); 
}