各位大神帮忙给个好的算法.

king8192 2016-07-20 03:38:38
问题说明:得到一个大的字符串,由3位数和空格组合而成,例如:"123 456 123 789 456 987 678 689 ...........................567".这三位数在字符串中大概有10万个,请教各位大神如何快速算出每个3位数在这个字符串中重复出现的次数?
求大神给个有个有效率的代码!万分感谢!
...全文
151 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
king8192 2016-07-20
  • 打赏
  • 举报
回复
引用 7 楼 sp1234 的回复:
改一下上面的代码
var s = "123 456 123 789 456 987 678 689";
var q = from x in s.Split(' ')
        group x by x into g
        select new { name = g.Key, cnt = g.Count() };
foreach (var x in q) Console.WriteLine(x);
太感谢你了!顺便想问您一下,如果带上where怎么写啊,让重复的个数小于8
  • 打赏
  • 举报
回复
改一下上面的代码
var s = "123 456 123 789 456 987 678 689";
var q = from x in s.Split(' ')
        group x by x into g
        select new { name = g.Key, cnt = g.Count() };
foreach (var x in q) Console.WriteLine(x);
  • 打赏
  • 举报
回复
数据本身没序的话,那么只能循环遍历,也就谈不上效率 所以对于无序的内容,你可以直接用5L的group……
xuzuning 2016-07-20
  • 打赏
  • 举报
回复
知道了
            var q = from x in s.Split(' ').ToArray()
                    group x by x[0] into g
                    select new { name = g.First(), cnt = g.Count() };
xuzuning 2016-07-20
  • 打赏
  • 举报
回复
            var s = "123 456 123 789 456 987 678 689";
var q = from x in s.Split(' ').ToArray()
group x by x[0] into g
select new { name = g.Min(p => p), cnt = g.Count()};
foreach (var x in q) Console.WriteLine(x);

有点无聊的是,我不知道如何取分组键的值,所以只好出此下策(name = g.Min(p => p))
king8192 2016-07-20
  • 打赏
  • 举报
回复
大神们能给个小例子么,万分感谢,一定要运算效率高的啊.
wangyu0517 2016-07-20
  • 打赏
  • 举报
回复
用hashSet
Forty2 2016-07-20
  • 打赏
  • 举报
回复
Dictionary<styring, int>

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧