当前位置:编程学习 > C#/ASP.NET >>

C# 正则/其他 判断字符串出现次数最多的

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

不知道怎么实现? --------------------编程问答-------------------- 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); --------------------编程问答-------------------- 应该是降序
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


             */
--------------------编程问答-------------------- 正则请用到合适的地方,这里用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();
--------------------编程问答-------------------- 谢谢各位大侠啊,不知道那种效率高些? --------------------编程问答--------------------
引用 1 楼 devmiao 的回复:
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);


+1 --------------------编程问答--------------------
引用 4 楼 love560 的回复:
谢谢各位大侠啊,不知道那种效率高些?

都一样。因为思路都是一样的。 --------------------编程问答--------------------
引用 3 楼 nice_fish 的回复:
正则请用到合适的地方,这里用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();


谢谢各位大侠了哈,我语句这样写的


        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个字符串怎么写呢?
再次感谢~ --------------------编程问答-------------------- 思路是关键,有思路最好,再加调试成功和经验大幅增长
公历→农历
2013年06月08日
双子座
二〇一三年五月初一
癸巳〖蛇〗 戊午月 乙巳日 丁亥时
今属:木;五行:水火土木;缺:金。
纳音五行:长流水。 --------------------编程问答--------------------
引用 1 楼 devmiao 的回复:
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);

被抢答完啦~顶一个呗~ --------------------编程问答--------------------
引用 4 楼 love560 的回复:
谢谢各位大侠啊,不知道那种效率高些?


你自己写一个根据逗号分隔字符的程序,再写一个词法分析程序,你认为哪一个运行效率会低100倍? --------------------编程问答--------------------
引用 7 楼 love560 的回复:
Quote: 引用 3 楼 nice_fish 的回复:

正则请用到合适的地方,这里用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();


谢谢各位大侠了哈,我语句这样写的


        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) --------------------编程问答-------------------- 期待答案
-----------------------
公历→农历
2013年06月08日
双子座
二〇一三年五月初一
癸巳〖蛇〗 戊午月 乙巳日 丙子时
今属:木;五行:水火土木;缺:金。
纳音五行:长流水。
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,