1

我有一个很大的字符串列表。我想知道该列表是否包含任何重复 5 次的字符串。

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

我认为他们必须是比逐个遍历列表并计算每个字符串有多少个实例更好的方法?

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

4

5 回答 5

4

在性能方面没有什么比这更好的了,因为您显然需要至少遍历整个列表一次才能进行计数。但是在 LINQ 中,您可以使用更少的代码来解决问题,这是真的。这样的事情应该可以解决问题:

var listOfFiveTimers = list.GroupBy(s => s)
                           .Where(g => g.Count() == 5)
                           .Select(g => g.Key)
                           .ToList();
于 2013-08-02T10:03:43.880 回答
2
stringListName.GroupBy(x => x).Any(x => x.Count() == 5);

测试使用

 var stringListName = new string[] { "a", "a", "a", "a", "a", "b" };
于 2013-08-02T10:01:01.520 回答
1
 bool duplicated5times = list.GroupBy(x=>x).Any(x=>x.Count() == 5);
于 2013-08-02T10:01:19.037 回答
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();
}
于 2013-08-02T10:03:53.803 回答
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
     );
于 2013-08-02T10:01:13.303 回答