如下需求:
有一字符串:string key="中国,河南,合肥,中国,中国人,河南,字符串,字符串,字符串,字符串,中国人"
判断字符串key中出现频率最高的3个字符串,结果如:string sum="字符串,中国,河南"不知道怎么实现?

解决方案 »

  1.   

    string key = "中国,河南,合肥,中国,中国人,河南,字符串,字符串,字符串,字符串,中国人";
    var query = key.Split(',').GroupBy(x => x).OrderBy(x => x.Count()).Select(x => x.Key).Take(3);
    foreach (var item in query)
        Response.WriteLine(item);
      

  2.   

    应该是降序string key = "中国,河南,合肥,中国,中国人,河南,字符串,字符串,字符串,字符串,中国人";            var list = Regex.Split(key, @"[,,]", RegexOptions.IgnorePatternWhitespace).GroupBy(a => a).OrderByDescending(a => a.Count()).Select(a =>a.Key).Take(3).ToList();
                /*
                [0] "字符串" string
        [1] "中国" string
        [2] "河南" string
                 */
      

  3.   

    正则请用到合适的地方,这里用Linq很方便就可以操作了。  var query = "中国,河南,合肥,中国,中国人,河南,字符串,字符串,字符串,字符串,中国人".Split(',').GroupBy(x => x).Select(x => new { key = x.Key, nums = x.Sum(p => p.Count()) }).Take(3);
                foreach (var item in query)
                {
                    Console.WriteLine("字符串:"+item.key+" 次数:"+item.nums);
                }
                Console.Read();
      

  4.   


    谢谢各位大侠了哈,我语句这样写的
            var query = Key.Split(',').GroupBy(x => x).Select(x => new { key = x.Key, nums = x.Sum(p => p.Count()) }).Take(10).OrderByDescending(x => x.nums);
    现在,我想先对Key中分割的字符串按长度排序,然后分组查处出现频率高的10个字符串怎么写呢?
    再次感谢~
      

  5.   


    谢谢各位大侠了哈,我语句这样写的
            var query = Key.Split(',').GroupBy(x => x).Select(x => new { key = x.Key, nums = x.Sum(p => p.Count()) }).Take(10).OrderByDescending(x => x.nums);
    现在,我想先对Key中分割的字符串按长度排序,然后分组查处出现频率高的10个字符串怎么写呢?
    再次感谢~加一个OrderBy(x => x.Length)